APScheduler 不运行计划任务:Flask + uWSGI

问题描述 投票:0回答:1

我在 Flask 和 uWSGI 上有一个应用程序,在 SQLite 中有一个作业存储。我随应用程序一起启动调度程序,并在访问某些 url 时通过

add_task
添加新任务。 我看到任务已正确保存在作业库中,我可以通过API查看它们,但它没有在指定时间执行。 一些重要数据:

uwsgi.ini

processes = 1
enable-threads = true

__init__.py

scheduler = APScheduler()
scheduler.init_app(app)
with app.app_context():
    scheduler.start()

main.py

            scheduler.add_job(
                id='{}{}'.format(test.id, g.user.id),
                func = pay_day,
                args = [test.id, g.user.id],
                trigger ='interval',
                minutes=test.timer
            )

service.py

def pay_day(tid, uid):
    with scheduler.app.app_context():
     *some code here*

有趣的行为:如果您通过访问 URL 创建任务并在之后重新启动应用程序,则该任务将被执行。但是,如果应用程序正在运行,并且其中一个用户通过访问 URL 创建任务,则该任务只有在应用程序重新启动后才会完成。 即使在调度程序日志中,我也没有收到任何错误或异常。 我已经不知道如何让它发挥作用以及我做错了什么。我需要提示。

python flask uwsgi apscheduler
1个回答
0
投票

来自 APScheduler 常见问题解答:

uWSGI 采用了一些禁用全局解释器锁的技巧 随之而来的是对线程操作至关重要的线程的使用 AP调度程序。要解决此问题,您需要使用以下命令重新启用 GIL --启用线程开关。有关更多详细信息,请参阅 uWSGI 文档。

我知道您在 uwsgi.ini 中设置了enable-threads = true,但请尝试使用命令行启用它。

© www.soinside.com 2019 - 2024. All rights reserved.