簡體   English   中英

在 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 版本,因為擔心它會影響我正在使用的其他庫,因為其中一些庫是新的,並且不是為在舊版本的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM