The Ventilator
file: bin/zmqx_ventilator.pl @d72295310
14: my $control_in = ZMQx::Class::AnyEvent->watcher( $control, sub {
15: while (my $message = $control->receive) {
16: my ($address, $null, @tasks) = @$message;
17:
18: my $task_id = sprintf("r%09d", rand(900_000_000));
19: my $task_count = @tasks;
20: my @result = map { '' } @tasks;
21: $pending{$task_id} = {
22: expect => $task_count,
23: reply_to => $address,
24: results => \@result,
25: };
26:
27: say "$task_id: Ventilator got: ".join( ',', @tasks );
28:
29: # tell workers to work
30: for my $index (0 .. $task_count-1) {
31: my $task = $tasks[$index];
32: say "$task_id: send request to worker: $index:$task";
33: $fan->send([$task_id,$index,$task]);
34: }
35: }
36: });