Форкинг для запуска кода в дочернем процессе с танцором 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" немедленно возвращается в браузер пользователя, и запрос завершается; разветвленный процесс бездействует в течение десяти секунд, затем выдает предупреждение (видимое на терминале) и завершается.