问题 烧瓶中的Python多处理


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

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


6288
2018-02-25 01:34


起源

您想为单个请求使用多线程吗?或者您希望每个请求都是一个单独的进程/线程? - Brendan Abel
每个请求应该是一个单独的线程。 - Corbbin Goldsmith
我将接受重定向到现有线程作为答案。 - Corbbin Goldsmith


答案:


Flask 附带一个内置的开发Web服务器, 但你不应该在生产中使用它

要获得很酷的功能,例如每个请求和静态文件服务的单独进程,您需要在您的前面运行实际的Web服务和WSGI服务 Flask 应用。

Flask 文档提供 关于如何设置它的几个例子。流行的Web服务器/ WSGI组合是Apache / mod_wsgi和Nginx / Gunicorn,但还有许多其他选项。


10
2018-02-25 02:45



...也谢谢你! - Corbbin Goldsmith
链接坏了:( - leoschet
@leoschet谢谢,更新它们以使用最新的文档。 - Brendan Abel


设置它的一个非常好的方法是使用“uwsgi”作为您的应用程序服务器(和协议),并使用Nginx作为您的前端代理。这些是超快速,可扩展的处理线程,它是Flask推荐的方法之一。虽然烧瓶文档提供了基本配置,但本指南是我使用过的,它提供了更加深入的安装演练。他们正在使用Ubuntu,但只需稍加修改(对安装命令),它将适用于大多数Linux风格。

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


5
2018-02-25 15:09



谢谢!回答了 - Corbbin Goldsmith


正如其他人所提到的,有专门的工具可以做到这一点(芹菜 似乎是最好的),但如果有人想要快速设置和工作,这是我的方法,只使用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。在这种情况下,您应该在非对象/独立函数内创建对象,并传递创建对象所需的参数。有关详情,请参阅 这里


0
2017-07-25 20:24