Python 烧瓶内多进程应用程序向上旋转2个进程

Python 烧瓶内多进程应用程序向上旋转2个进程,python,flask,multiprocessing,python-multiprocessing,Python,Flask,Multiprocessing,Python Multiprocessing,我正在构建一个flask应用程序,需要一些后台进程才能运行。我决定使用多进程,但在烧瓶中运行时会产生两个进程。有人知道为什么会这样吗?我已经在OSX和Ubuntu12.04上测试过了,结果是一样的。以下是一个例子: import time import multiprocessing from flask import Flask app = Flask(__name__) backProc = None def testFun(): print('Starting') wh

我正在构建一个flask应用程序,需要一些后台进程才能运行。我决定使用多进程,但在烧瓶中运行时会产生两个进程。有人知道为什么会这样吗?我已经在OSX和Ubuntu12.04上测试过了,结果是一样的。以下是一个例子:

import time
import multiprocessing
from flask import Flask

app = Flask(__name__)
backProc = None

def testFun():
    print('Starting')
    while True:
        time.sleep(3)
        print('looping')
        time.sleep(3)
        print('3 Seconds Later')

@app.route('/')
def root():

    return 'Started a background process with PID ' + str(backProc.pid) + " is running: " + str(backProc.is_alive())

@app.route('/kill')
def kill():
    backProc.terminate()
    return 'killed: ' + str(backProc.pid)

@app.route('/kill_all')
def kill_all():
    proc = multiprocessing.active_children()
    for p in proc:
        p.terminate()
    return 'killed all'

@app.route('/active')
def active():
    proc = multiprocessing.active_children()
    arr = []
    for p in proc:
        print(p.pid)
        arr.append(p.pid)

    return str(arr)

@app.route('/start')
def start():
    global backProc
    backProc = multiprocessing.Process(target=testFun, args=(), daemon=True)
    backProc.start()
    return 'started: ' + str(backProc.pid)

if __name__ == '__main__':
    app.run(port=int("7879"))

这是Flask auto reload特性的一个问题,该特性在开发过程中用于在检测到代码更改时自动重新启动Web服务器,以便在不需要手动重新启动的情况下提供新代码

在指南中,由于默认情况下重新加载程序设置为on,因此,
“app.run()”
调用始终位于
“if”\uuuuuuu name\uuuuu==“\uuuuu main\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu”条件下。当使用多处理时,此条件将导致false,因此在以下函数中使用时,您必须禁用Flask autoreload:

def startWebserver():
          app.run(debug=True, use_reloader=False)
链接供参考:


太棒了,真管用。谢谢你,我的头撞到了墙上,但是要知道,使用apache/mod_wsgi部署Flask应用程序,使用多处理根本不起作用,或者是非常不可靠的。最好使用芹菜、休伊或Rq之类的任务队列。@jjmurre:Apache面临什么问题?我计划在apache上部署具有多处理功能的flask应用程序。@jjmurre您尝试在apache上部署了吗?你有问题吗?@JuanPerez使用多个进程部署带有mod_wsgi的Flask不是问题。在我2017年9月12日的评论中,我指的是python多处理模块,而不是mod_wsgi。我想让一个进程与使用python 2.7.x作为守护进程运行的进程异步。问题在于,即使daemon设置为True,在进程完成运行之前,端点中的返回不会发生。我在uWSGI上运行这个,也许这就是原因。