2009-06-04 2 views
4

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

ответ

9

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

0

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