这个问题可能已经被问过,很可能也有答案,但是我不知道在哪里找到它。
问题:我有一个用于Python Flask的路由器,每次调用处理数据需要一段时间。我需要使每个路由器调用成为一个线程,这样它就不必等待请求加载。
这个问题可能已经被问过,很可能也有答案,但是我不知道在哪里找到它。
问题:我有一个用于Python Flask的路由器,每次调用处理数据需要一段时间。我需要使每个路由器调用成为一个线程,这样它就不必等待请求加载。
Flask
内置了一个开发用的Web服务器,但是在生产环境中不应该使用它。Flask
应用程序前运行一个实际的Web服务和WSGI服务。
Flask
文档提供若干示例来设置这些内容。流行的Web服务器/WSGI组合有Apache/mod_wsgi和Nginx/Gunicorn,但还有许多其他选择。正如其他人所提到的,有专门的工具来完成这个任务(celery 似乎是最好的选择),但如果有人只想快速设置并运行一些东西,这里是我使用 Python 的 multiprocessing
模块的方法:
from flask import Flask
from multiprocessing import Process
import time
app = Flask(__name__)
def detachedProcessFunction(wait_time):
i=0
while i<wait_time:
i = i+1
print "loop running %d" % i
time.sleep(1)
@app.route('/start')
def start():
global p
p = Process(target=detachedProcessFunction, args=(15))
p.start()
return render_template('layout.html')
if __name__ == '__main__':
app.run(debug=True)
注意:此方法无法用于运行对象函数(例如obj.objFunc()
)。您将收到一个EOFError: Ran out of input inside a class
。在这种情况下,您应该在非对象/独立函数中创建对象,并传递您需要创建对象的参数。有关更多信息,请参见此处。