isolating thread-unsafe modules

Ashley Hindmarsh ash+perl at best-scarper.co.uk
Mon Jul 29 07:54:27 BST 2013


> Message: 3
> Date: Sun, 28 Jul 2013 20:07:59 +0100
> From: Bob MacCallum <uncoolbob at gmail.com>
> Subject: isolating thread-unsafe modules
> To: "London.pm Perl M[ou]ngers" <london.pm at london.pm.org>
> Message-ID:
>         <
> CAFLiiKdbkM62+Wr79hyRS8h-SeR0E+QGiVj1NaHX48sTkY0Qvg at 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


More information about the london.pm mailing list