烧瓶中的Python多处理

时间:2016-02-25 01:34:20

标签: python flask parallel-processing

这个问题可能已被提出,而且很可能已经回答了,但我不知道在哪里可以找到它。

问题:我有一个用于python烧瓶的路由器,需要一段时间来处理每个呼叫的数据。我需要让每个对路由的调用本身都是一个线程,所以它不必等待加载请求。

3 个答案:

答案 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风格。

https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-uwsgi-and-nginx-on-ubuntu-14-04

答案 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