Как я могу разветвить CGI-программу на Perl, чтобы избавиться от длительных задач? - PullRequest
4 голосов
/ 04 июня 2009

Я пишу планировщик Bulk Mail, управляемый из Perl / CGI-приложения, и хотел бы узнать о "хороших" способах разветвления CGI-программы для выполнения отдельной задачи? Стоит ли вообще это делать? Или лучше перенести накладные расходы на запуск отдельного механизма очереди заданий, такого как Gearman или TheSchwartz , как недавно было предложено . Меняется ли ответ / перспектива при использовании фреймворка, близкого к MVC, такого как CGI :: Application поверх vanilla CGI.pm? Последнее происходит от возможного проекта, который я имею в виду для плагина CGI :: Application - который сделал бы «разветвление» процесса относительно простым для вызова.

Ответы [ 2 ]

9 голосов
/ 05 июня 2009

Посмотрите на Proc :: Daemon - это самое простое, что работает. Из вашего CGI-скрипта выполните CGI-бизнес (получение ввода, возврат ответа браузеру), затем вызовите Proc :: Daemon :: init (), который выполняет форк, демонизирует ваш процесс и делает родительский выход. Затем ваш сценарий (теперь демон) выполняет свои долгосрочные задачи и завершает работу после их завершения. Вы захотите обновить что-либо (файл, запись в базе данных) во время работы в качестве демона, чтобы последующие вызовы CGI могли проверить, что он сделал (или как он продвигается).

0 голосов
/ 05 июня 2009

Было бы полезно что-то вроде POE ? Это скорее событие, чем разветвление, но оно может удовлетворить ваши потребности.

...