Hadn't seen 'forks'... I got forks to install on one machine (both perls 5.12.3. and 5.18.0) but not another (also 5.12.3) which just hangs after this test error message:
t/forks01.t ............... perl: mg.c:94: S_save_magic: Assertion `((sv)->sv_flags & (0x00200000|0x00400000|0x00800000))' failed. But where it did install, I trivially tried to see if Thread::Queue would play nicely with forks. I thought it didn't but after reading the docs I got it to work! (excuse the lack of "my" - this is cut and pasted from my perl shell) use forks; use forks::shared; use Thread::Queue; $queue = Thread::Queue->new() share($queue); $thr = threads->create( sub { while (my $job_spec = $queue->dequeue()) { print "got $job_spec\n" } } ); $queue->enqueue("hello world") nice! On Mon, Jul 29, 2013 at 7:54 AM, Ashley Hindmarsh < ash+p...@best-scarper.co.uk> wrote: > > Message: 3 > > Date: Sun, 28 Jul 2013 20:07:59 +0100 > > From: Bob MacCallum <uncool...@gmail.com> > > Subject: isolating thread-unsafe modules > > To: "London.pm Perl M[ou]ngers" <london.pm@london.pm.org> > > Message-ID: > > < > > cafliikdbkm62+wr79hyrs8h-ser0e+qgivj1nahx48stky0...@mail.gmail.com> > > Content-Type: text/plain; charset=ISO-8859-1 > > > > Sorry for the Perl question, but I'm a bit out of my depth... > > > > I have a Dancer app providing a web service, and I have another script > > using the same Dancer config file and db schema (e.g. "use Dancer > > qw/:script/"). This script watches the database (for changes made by the > > web app) and does the "heavy lifting". Now I want to parallelise the > heavy > > lifting with threads and it seems from the core dump and googling that > > DBD::Pg is not thread safe (see the few lines of debugger output below). > > > > That's fine - I am happy to run only non-database code in my "worker > > threads". The trouble is that even if I do this, I think the > > threads->create is threading the Dancer globals which include postgres > > schema connections. > > > > I tried a few "no My::Schema; no DBD::Pg; no Dancer ..." declarations in > > the block with the threads->create - but that didn't seem to help. > > > > Does anyone know how I can use thread-safe and thread-unsafe code in the > > same script? I think I just need to make a block where none of the > > Dancer/database stuff is in scope? > > > > I thought Thread::Isolate might help, but it hangs on the first test > during > > the install. It's dated 2005. > > > > thanks! > > Bob. > > > > > Does anyone use 'forks'? > > CPAN: "drop-in replacement for Perl threads using fork()" > > Latest: http://search.cpan.org/~rybskej/forks-0.34/ > > It looks like it might do the trick, but I've never had cause to use it. > > Ash >