Как я могу выполнить код после рендеринга в Mojolicious?

У меня есть длинный код, который я хотел бы выполнить после рендеринга в приложении Mojolicious.

Я хотел бы избежать использования очередей Minion, так как я буду вызывать много очень коротких процессов, и я изучили Mojolicious::Plugin::ForkCall и Mojolicious::Plugin::Subprocess, но оба они истекают по тайм-ауту (поскольку короткие процессы звонят много раз).

Помню, где-то встречал такой пример, но больше не могу найти.

Любая помощь?


person simone    schedule 04.01.2018    source источник


Ответы (1)


Вызов fork в хуке after_dispatch?

$app->hook(after_dispatch => sub {
  my $c = shift;
  my $pid = fork();
  if (defined($pid) && $pid == 0) {
      doSlowStuff();
      exit;
  }

});
person mob    schedule 04.01.2018
comment
спасибо - похоже, это работает, но можно ли сделать это только для одного маршрута в облегченной версии, а не для каждой отправки? Мне это не нужно постоянно - только на некоторых ответах. - person simone; 04.01.2018
comment
Таймер с fork() тогда? mojolicious.org/perldoc/Mojo/IOLoop#timer - person mpapec; 04.01.2018
comment
Да, я узнал благодаря вашему ответу. gist.github.com/simonecesano/0ed2163c2ba4e635d458611963027762. Хотите отредактировать, чтобы я мог принять ответ? - person simone; 05.01.2018