> 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