Sto costruendo un'app per flac e ho bisogno di alcuni processi in background da eseguire. Ho deciso di andare con multiprocesso, ma sta producendo due processi durante l'esecuzione all'interno di Flask. Qualcuno sa perché questo sarebbe successo? L'ho provato su OS X e Ubuntu 12.04, con gli stessi risultati. Ecco un esempio:Multiprocesso nell'app mobile che fa girare 2 processi
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"))
volevo per rendere un processo asincrono con l'esecuzione di Process come un demone usando python 2.7.x. Il problema è che il ritorno nell'endpoint non si verifica fino al termine dell'esecuzione del processo, anche se daemon è impostato su True. Sto eseguendo questo su uWSGI, forse è per questo. – radtek