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

时间:2017-05-17 16:05:03

标签: python multithreading flask timer scheduler

我正在研究一个烧瓶框架,试图安排一个工作,该工作将在午餐后30分钟内触发,并且只会发生一次。

我尝试使用 threading.Timer ,但由于我的工作调用了REST请求,我得到 RunTimeError:'在请求上下文之外工作' ,我无法解决。

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

因此,我正在寻找定时触发器作业的解决方案(不适用于间隔时间)。

看起来APscheduler必须以间隔为基础。

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

1 个答案:

答案 0 :(得分:1)

apscheduler add_job方法可以使用date触发器来执行您想要的操作。

专业提示:

如果您在烧瓶应用程序流程中使用apscheduler,当使用像gunicorn或uwsgi这样的wsgi服务器进行生产时,您将提交多次运行的工作(每个烧瓶工作者一个)。

遇到此问题时,gunicorn --preload选项并没有为我删除。

所以:

  • 如果适合你,你可以使用flask-apscheduler和他的休息服务器方法。
  • 或者将apscheduler分成一个守护进程
    • 使用uwsgi mules
    • 或保持gunicorn仅运行Web应用程序并使用主管启动 调度程序守护程序。
    • 或使用带有套接字的this解决方案,它有点脏,但具有简单的优点。

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