微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Flask 应用程序中运行计划任务时出现线程错误

如何解决在 Flask 应用程序中运行计划任务时出现线程错误

我想创建一个调度程序,它将在我的 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,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 版本,因为它会影响我正在使用的其他库,因为其中一些是新的并且不是为了在旧版本的 python 上运行而开发的。

是否有解决方法或替代库可用于安排任务在 Flask 应用程序上的指定时间间隔内运行?

解决方法

Python3.9 已弃用 Thread.isAlivesource。因此,系好安全带并解决您的恐惧,因为您的依赖项之一 (apscheduler) 需要 <python39

为了轻松测试这一点,我会在特定版本中使用 virtualenv 并查看问题是否仍然存在。

virtualenv --python py38 myvenv

对于该命令,您需要在 $PATH 上使用 python38,例如将其安装在您的机器上。然后重新运行您的代码。

,

那个代码看起来像是属于 APScheduler 2.x 的,它已经 7 年没有更新了。升级后问题就会消失。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。