gpt4 book ai didi

python - Flask 应用程序中的多进程旋转 2 个进程

转载 作者:太空狗 更新时间:2023-10-29 18:28:44 24 4
gpt4 key购买 nike

我正在构建一个 Flask 应用程序,需要一些后台进程才能运行。我决定使用多进程,但它在 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"))

最佳答案

这是 Flask 自动重新加载功能的一个问题,该功能在开发期间用于在检测到代码更改时自动重新启动网络服务器,以便在无需手动重新启动的情况下提供新代码。

在指南中,“app.run()” 调用始终放在 “if __name__ == '__main__'” 条件中,因为重新加载器是默认设置为开。使用多处理时,此条件将导致错误,因此在如下函数中使用 Flask 自动重载时必须禁用它:

def startWebserver():
app.run(debug=True, use_reloader=False)

引用链接:

http://blog.davidvassallo.me/2013/10/23/nugget-post-python-flask-framework-and-multiprocessing/

关于python - Flask 应用程序中的多进程旋转 2 个进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33927616/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com