Python Flask отправляет ответ немедленно
Мне нужно выполнить процесс во время запроса, как показано ниже
@app.route('/test')
def test_process():
print "starting new process"
p = Process(target=do_long_extra_job)
p.start()
return "this is response"
do_long_extra_job находится в другом процессе, поэтому ожидаемый рабочий процесс выглядит следующим образом
- начать процесс
- ответ
- длительная дополнительная работа закончена
но фактический поток такой
- Стат процесс
- длительная дополнительная работа закончена
- ответ
как я могу ответить сразу после начала нового процесса?
1 ответ
Метод apply_async в классе multiprocessing.Pool может работать для вас. "Процесс" не будет работать для вас в этом случае, так как это метод блокировки, то есть ваш оператор возврата не будет выполняться до тех пор, пока p.start() не завершит выполнение.
Пример с apply_async и multiprocessing.Pool:
def do_long_extra_job():
#some extra long process
return
@app.route('/test')
def test_process():
print "starting new process"
pool = multiprocessing.Pool(processes=1)
pool.apply_async(do_long_extra_job)
return "this is response"