python - 如何在 python Flask 中安排定时事件?

标签 python multithreading flask timer scheduler

我正在开发一个 Flask 框架,试图安排一项工作,该工作将在午餐后 30 分钟内触发,并且只发生一次。

我尝试使用threading.Timer,但是由于我的工作调用了 REST 请求,我收到 RunTimeError: 'working Outside of request context' 无法解决。

从这个线程中,我了解到不建议在 Flask 服务器上使用线程模块: How do you schedule timed events in Flask?

所以我正在寻找一个定时触发作业的解决方案(这不能按时间间隔工作)。

看起来 APscheduler 必须是基于间隔的。

如果有任何帮助,我将不胜感激。

最佳答案

apscheduler add_job方法可以采用日期触发器,这将允许您执行您想要的操作。

专业提示:

如果您在 Flask 应用程序进程中使用 apscheduler,那么当使用 Gunicorn 或 uwsgi 等 wsgi 服务器投入生产时,您将放弃多次运行您的作业(每个 Flask Worker 运行一次)。

遇到此问题时 gunicorn --preload这个选项不适合我。

所以:

  • 如果适合您,您可以将flask-apscheduler与他的其余服务器方法一起使用。
  • 或者将 apscheduler 分离成一个守护进程并
    • 使用uwsgi mules ,
    • 或者让gunicorn仅运行网络应用程序并使用supervisor(或等效的)来启动调度程序守护进程。

恕我直言,将gunicorn/flask和apscheduler分成两部分并使用supervisor是最干净但不那么复杂的解决方案。

关于python - 如何在 python Flask 中安排定时事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44029864/

相关文章:

Azure WebRole + Flask : AttributeError: 'module' object has no attribute 'wsgi_app'

python - Emacs - 在 Python 中运行当前文件

c# - Monitor.Wait 初始锁定?

python - 如何将 scipy.weave.inline 与外部 C 库一起使用?

python - python的Threading模块下锁定全局变量

python - PyGTK、线程和 WebKit

python - Flask-restful:将复杂对象编码为 json

Docker compose 没有启动所有容器(可能与 Flask 相关?)

python - 在使用 scikit 学习进行特征选择后识别过滤后的特征

python - 在 python GEKKO 或 matlab APM 中指定解决方案文件的输出目录