这个问题可能已被提出,而且很可能已经回答了,但我不知道在哪里可以找到它。
问题:我有一个用于python烧瓶的路由器,需要一段时间来处理每个呼叫的数据。我需要让每个对路由的调用本身都是一个线程,所以它不必等待加载请求。
答案 0 :(得分:14)
Flask
附带内置开发网络服务器but you shouldn't be using it in production。
要获得各项请求和静态文件服务的独立流程等酷炫功能,您需要在Flask
应用程序前运行实际的Web服务和WSGI服务。
Flask
文档提供several examples on how to set that up。流行的Web服务器/ WSGI组合是Apache / mod_wsgi和Nginx / Gunicorn,但还有很多其他选择。
答案 1 :(得分:5)
设置它的一个非常好的方法是使用" uwsgi"作为您的应用程序服务器(和协议)和Nginx作为您的前端代理。这些是超快速,可扩展的处理线程,它是Flask推荐的方法之一。虽然烧瓶文档提供了基本配置,但本指南是我使用的指南,它提供了更加深入的安装演练。他们使用的是Ubuntu,但只需稍加修改(对于安装命令)它就适用于大多数Linux风格。
答案 2 :(得分:1)
就像其他人提到的那样,有专门的工具可以做到这一点(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
。在这种情况下,您应该在非对象/独立函数内创建对象,并传递创建对象所需的参数。有关更多信息,请参见here