Farsheed..
5
好吧,虽然你的方法不正确,但基本上它可能会导致程序耗尽可用的线程.正如阿里提到的,一般的方法是使用像RQ或的作业队列Celery.但是,您不需要提取函数来使用这些库.对于Flask,我建议你使用Flask-RQ.它很简单:
RQ
pip install flask-rq
只需记住在使用Flask应用程序之前安装Redis.
只需在Flask函数中使用@Job Decorator:
from flask.ext.rq import job
@job
def process(i):
# Long stuff to process
process.delay(3)
最后你需要rqworker启动工人:
rqworker
您可以查看RQ文档以获取更多信息.RQ专为简单的长期运行流程而设计.
芹菜
Celery更复杂,具有巨大的功能列表,如果您不熟悉作业队列和分布式处理方法,则不建议使用Celery.
Greenlets
Greenlets有交换机.让您在长时间运行的进程之间切换.您可以使用greenlet运行进程.好处是您不需要Redis和其他工作人员,而是必须重新设计您的兼容功能:
from greenlet import greenlet
def test1():
print 12
gr2.switch()
print 34
def test2():
print 56
gr1.switch()
print 78
gr1 = greenlet(test1)
gr2 = greenlet(test2)
gr1.switch()