Форкинг для запуска кода в дочернем процессе с танцором Perl

У меня есть приложение Dancer в Perl, которое обрабатывает запросы получения / отправки.

Один из моих примеров маршрутов ниже:

post '/handle_data' => sub {

    # perform some calculations
    ...
    # store some data
    ...
    # do some long running tasks
    ...
};

Мой вопрос: есть ли простой способ выполнять длительные задачи в другом процессе, не блокируя запрос?

я пробовал fork and return в родительском процессе, с exit после длительных заданий для ребенка, но, похоже, все это блокирует отправку ответа до завершения дочернего процесса.

Любая помощь приветствуется.

РЕДАКТИРОВАТЬ:

Я закончил тем, что переключился на полноценный сервер заданий, в частности на Perl версию Gearman

1 ответ

Решение

Вилка и возврат, кажется, работают на меня.

Я старался:

#!/usr/bin/perl

use Dancer;

get '/' => sub {
    fork and return "Content!\n";

    sleep 10; # do your actual work here
    warn "Child process done\n";
    exit;
};

dance;

Запуск этого через автономный сервер или через plackup/Starman работает должным образом - "Content!\ N" немедленно возвращается в браузер пользователя, и запрос завершается; разветвленный процесс бездействует в течение десяти секунд, затем выдает предупреждение (видимое на терминале) и завершается.

Другие вопросы по тегам