【发布时间】:2016-02-28 21:34:09
【问题描述】:
我正在构建一个烧瓶应用程序,需要一些后台进程来运行。我决定使用多进程,但它在 Flask 中运行时会产生两个进程。有谁知道为什么会发生这种情况?我已经在 OS X 和 Ubuntu 12.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"))
【问题讨论】:
-
我想使用 python 2.7.x 使进程与作为守护进程运行的进程异步。问题是在进程完成运行之前不会发生端点中的返回,即使 daemon 设置为 True。我在 uWSGI 上运行它,也许这就是原因。
标签: python flask multiprocessing python-multiprocessing