运行 Flask 应用程序内的计划任务时出现线程错误
Thread error while running scheduled task inside of a Flask application
我想在我的 Flask 应用程序中创建一个每小时 运行 的调度程序。为此,我使用了 APScheduler 库。这是我在网上找到的最基本的源代码:
from apscheduler.scheduler import Scheduler
import atexit
cron = Scheduler(daemon=True)
cron.start()
@cron.interval_schedule(minutes=1)
def job_function():
print("Hi")
atexit.register(lambda: cron.shutdown(wait=False))
当我尝试 运行 我的应用程序时,出现以下错误:
Traceback (most recent call last):
File "/home/dimitar/Desktop/dev/Tradiebot/local/WorxManager/backend/Server/app.py", line 31, in <module>
def job_function():
File "/usr/lib/python3.9/site-packages/apscheduler/scheduler.py", line 405, in inner
func.job = self.add_interval_job(func, **options)
File "/usr/lib/python3.9/site-packages/apscheduler/scheduler.py", line 347, in add_interval_job
return self.add_job(trigger, func, args, kwargs, **options)
File "/usr/lib/python3.9/site-packages/apscheduler/scheduler.py", line 285, in add_job
if not self.running:
File "/usr/lib/python3.9/site-packages/apscheduler/scheduler.py", line 148, in running
thread_alive = self._thread and self._thread.isAlive()
AttributeError: 'Thread' object has no attribute 'isAlive'
经过一番研究,我发现 python 3.9 上的其他人也遇到过类似的问题,但我没有找到解决问题的方法。
我不想降级我的 python 版本,因为担心它会影响我正在使用的其他库,因为其中一些是新的,并没有在旧版本的 [=] 上开发到 运行 23=].
是否有解决方法或替代库可用于在 Flask 应用程序的指定时间间隔内将任务安排到 运行?
Python3.9 已弃用 Thread.isAlive
:source。因此,系好安全带并解决你的恐惧,因为你的依赖项之一 (apscheduler
) 需要 <python39
.
虽然我会使用特定版本的 virtualenv
并查看问题是否仍然存在,但为了轻松测试它。
virtualenv --python py38 myvenv
对于该命令,您需要 python38 在您的 $PATH
上可用,例如在你的机器上安装它。然后重新运行您的代码。
该代码看起来属于 APScheduler 2.x,它已经 7 年没有更新了。升级,问题消失。
我想在我的 Flask 应用程序中创建一个每小时 运行 的调度程序。为此,我使用了 APScheduler 库。这是我在网上找到的最基本的源代码:
from apscheduler.scheduler import Scheduler
import atexit
cron = Scheduler(daemon=True)
cron.start()
@cron.interval_schedule(minutes=1)
def job_function():
print("Hi")
atexit.register(lambda: cron.shutdown(wait=False))
当我尝试 运行 我的应用程序时,出现以下错误:
Traceback (most recent call last):
File "/home/dimitar/Desktop/dev/Tradiebot/local/WorxManager/backend/Server/app.py", line 31, in <module>
def job_function():
File "/usr/lib/python3.9/site-packages/apscheduler/scheduler.py", line 405, in inner
func.job = self.add_interval_job(func, **options)
File "/usr/lib/python3.9/site-packages/apscheduler/scheduler.py", line 347, in add_interval_job
return self.add_job(trigger, func, args, kwargs, **options)
File "/usr/lib/python3.9/site-packages/apscheduler/scheduler.py", line 285, in add_job
if not self.running:
File "/usr/lib/python3.9/site-packages/apscheduler/scheduler.py", line 148, in running
thread_alive = self._thread and self._thread.isAlive()
AttributeError: 'Thread' object has no attribute 'isAlive'
经过一番研究,我发现 python 3.9 上的其他人也遇到过类似的问题,但我没有找到解决问题的方法。
我不想降级我的 python 版本,因为担心它会影响我正在使用的其他库,因为其中一些是新的,并没有在旧版本的 [=] 上开发到 运行 23=].
是否有解决方法或替代库可用于在 Flask 应用程序的指定时间间隔内将任务安排到 运行?
Python3.9 已弃用 Thread.isAlive
:source。因此,系好安全带并解决你的恐惧,因为你的依赖项之一 (apscheduler
) 需要 <python39
.
虽然我会使用特定版本的 virtualenv
并查看问题是否仍然存在,但为了轻松测试它。
virtualenv --python py38 myvenv
对于该命令,您需要 python38 在您的 $PATH
上可用,例如在你的机器上安装它。然后重新运行您的代码。
该代码看起来属于 APScheduler 2.x,它已经 7 年没有更新了。升级,问题消失。