这个问题可能已被提出,而且很有可能得到回答,但我不知道在哪里可以找到它。
问题:我有一个用于python烧瓶的路由器,需要一段时间来处理每个呼叫的数据。我需要使每个对路由的调用本身都是一个线程,因此它不必等待加载请求。
这个问题可能已被提出,而且很有可能得到回答,但我不知道在哪里可以找到它。
问题:我有一个用于python烧瓶的路由器,需要一段时间来处理每个呼叫的数据。我需要使每个对路由的调用本身都是一个线程,因此它不必等待加载请求。
Flask
附带一个内置的开发Web服务器, 但你不应该在生产中使用它。
要获得很酷的功能,例如每个请求和静态文件服务的单独进程,您需要在您的前面运行实际的Web服务和WSGI服务 Flask
应用。
该 Flask
文档提供 关于如何设置它的几个例子。流行的Web服务器/ WSGI组合是Apache / mod_wsgi和Nginx / Gunicorn,但还有许多其他选项。
设置它的一个非常好的方法是使用“uwsgi”作为您的应用程序服务器(和协议),并使用Nginx作为您的前端代理。这些是超快速,可扩展的处理线程,它是Flask推荐的方法之一。虽然烧瓶文档提供了基本配置,但本指南是我使用过的,它提供了更加深入的安装演练。他们正在使用Ubuntu,但只需稍加修改(对安装命令),它将适用于大多数Linux风格。
正如其他人所提到的,有专门的工具可以做到这一点(芹菜 似乎是最好的),但如果有人想要快速设置和工作,这是我的方法,只使用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
。在这种情况下,您应该在非对象/独立函数内创建对象,并传递创建对象所需的参数。有关详情,请参阅 这里