Job data is passed to workers by making a shared clone of it. Cloning a shared variable is causing the problem.
Solution that keeps data shared:
use threads; use threads::shared; use Data::Dumper qw( Dumper ); use Thread::Pool::Simple qw( ); my $state :shared = shared_clone({test1 => {test1 => 123}, test2 => {t +est2 => 'abc'}}); sub worker { my ($id) = @_; my $data = $state->{$id}; print "Got Data: ".Dumper($data); return { success => 1 }; } { my $tp = Thread::Pool::Simple->new(min => 1, max => 10, do => [ \& +worker ]); my $id1 = $tp->add('test1'); my $id2 = $tp->add('test2'); print "return 1: ".Dumper($tp->remove($id1)); print "return 2: ".Dumper($tp->remove($id2)); }
Solution that avoids globals:
use threads; use threads::shared; use Data::Dumper qw( Dumper ); use Thread::Pool::Simple qw( ); sub worker { my ($data) = @_; print "Got Data: ".Dumper($data); return { success => 1 }; } { my $state = {test1 => {test1 => 123}, test2 => {test2 => 'abc'}}; my $tp = Thread::Pool::Simple->new(min => 1, max => 10, do => [ \& +worker ]); my $id1 = $tp->add($state->{'test1'}); my $id2 = $tp->add($state->{'test2'}); print "return 1: ".Dumper($tp->remove($id1)); print "return 2: ".Dumper($tp->remove($id2)); }
In reply to Re: Error trying to dump a hash that is shared
by ikegami
in thread Error trying to dump a hash that is shared
by lost953
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |