我正在开发一个 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/