[英]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 版本,因為擔心它會影響我正在使用的其他庫,因為其中一些庫是新的,並且不是為在舊版本的 python 上運行而開發的。
是否有解決方法或替代庫可用於安排任務在 flask 應用程序上以指定的時間間隔運行?
Python3.9 已棄用Thread.isAlive
:來源。 因此,系好安全帶並解決您的恐懼,因為您的依賴項之一( apscheduler
)需要<python39
。
盡管我會使用具有特定版本的virtualenv
並查看問題是否仍然存在,但為了輕松測試這一點。
virtualenv --python py38 myvenv
對於該命令,您需要$PATH
上可用的 python38,例如將其安裝在您的機器上。 然后重新運行您的代碼。
該代碼看起來屬於 APScheduler 2.x,它已經 7 年沒有更新了。 升級,問題就消失了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.