在Flask Python中产生一个单独的执行线程(即向dev发送日志电子邮件)?

VMD*_*MDX 5 python multithreading flask uwsgi

我正在运行一个在uwsgi后面运行的Flask webapp(2个进程).我的代码的一部分涉及ping远程资源,查看它是否已被修改(If-Modified-Since),并在Web服务器上更新该资源的本地副本(如果已修改).

该更新还向我发送了差异的电子邮件.我担心这需要很长时间,导致用户请求在发送电子邮件时超时.

Python线程库是解决这个问题的正确方法吗?(产生一个线程并在那里发送电子邮件?)这会干扰uwsgi的进程吗?

谢谢您的帮助!

(旁注:如果他们都试图更新本地副本上的资源,我也有点担心2个uwsgi进程碰撞头...我想知道线程模块的锁定功能是否正确这个问题也是?)

编辑:澄清一下,我主要担心的是电子邮件任务是代码执行的一部分.它需要很长时间并在return_template呼叫之前运行,因此会阻止对用户的响应.考虑到Flask/uwsgi环境,Python线程库是否是解决此问题的正确方法?

小智 6

这类任务的最佳解决方案是使用uWSGI假脱机程序.如果你想以特定的间隔运行任务,你可以使用@timer装饰器让假脱机程序进行努力工作:

from uwsgidecorators import *

#this will execute the_task() every 30 seconds in the spooler
@timer(30, target='spooler')
def the_task(signum)
    do_the_long_task()
Run Code Online (Sandbox Code Playgroud)