Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change
 
PerlMonks  

Re: Error trying to dump a hash that is shared

by ikegami (Patriarch)
on Feb 14, 2018 at 08:06 UTC ( [id://1209109]=note: print w/replies, xml ) Need Help??


in reply to Error trying to dump a hash that is shared

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)); }

Replies are listed 'Best First'.
Re^2: Error trying to dump a hash that is shared
by lost953 (Acolyte) on Feb 14, 2018 at 19:24 UTC
    Thanks for the response. Is there any way to "unshare" the data before passing it into the ThreadPool so it can't get shared_cloned again. I tried cloning it but that didn't change the results.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1209109]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others perusing the Monastery: (5)
As of 2024-04-25 07:14 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found