diff options
author | franck cuny <franck@lumberjaph.net> | 2010-06-09 18:19:38 +0200 |
---|---|---|
committer | franck cuny <franck@lumberjaph.net> | 2010-06-09 18:19:38 +0200 |
commit | 5b2042053577cc6381c40c4fb5d5264e79a0312d (patch) | |
tree | 643da7415c478ee5e444231690fe8cd91329b75c /lib/presque/worker/Role/Dispatcher.pm | |
parent | a simple worker; a role for the REST interface to presque; reg signals (diff) | |
download | presque-worker-5b2042053577cc6381c40c4fb5d5264e79a0312d.tar.gz |
add logger; move some code for work and job in roles;
Diffstat (limited to 'lib/presque/worker/Role/Dispatcher.pm')
-rw-r--r-- | lib/presque/worker/Role/Dispatcher.pm | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/lib/presque/worker/Role/Dispatcher.pm b/lib/presque/worker/Role/Dispatcher.pm new file mode 100644 index 0000000..04ac8c3 --- /dev/null +++ b/lib/presque/worker/Role/Dispatcher.pm @@ -0,0 +1,44 @@ +package presque::worker::Role::Dispatcher; + +use Moose::Role; +use Try::Tiny; + +has fork_dispatcher => ( + is => 'ro', + isa => 'Bool', + default => 0, +); + +around work => sub { + my ($orig, $self, $job) = @_; + + try { + if ($self->fork_dispatcher) { + $self->_fork_and_work($orig, $job); + } + else { + $self->$orig($job); + } + }catch{ + $self->_job_failure($job, $_); + }; +}; + + +sub _fork_and_work { + my ($self, $orig, $job) = @_; + + my $pid = fork(); + if ($pid == 0) { + $self->$orig($job); + exit; + } + elsif ($pid > 0) { + return; + } + else { + # failure + } +} + +1; |