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. начать процесс
  2. ответ
  3. длительная дополнительная работа закончена

но фактический поток такой

  1. Стат процесс
  2. длительная дополнительная работа закончена
  3. ответ

как я могу ответить сразу после начала нового процесса?

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" 
Другие вопросы по тегам