The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Thread::Isolate - Create Threads that can be called externally and use them to isolate modules from the main thread.

DESCRIPTION

This module has the main purpose to isolate loaded modules from the main thread.

The idea is to create the Thread::Isolate object and call methods, evaluate codes and use modules inside it, with synchronized and unsynchronized calls.

USAGE

Synchronized calls:

  use Thread::Isolate ;
  
  my $thi = Thread::Isolate->new() ;

  $thi->eval(' 2**10 ') ;
  
  ...
  
  $thi->eval(q`
    sub TEST {
      my ( $var ) = @_ ;
      return $var ** 10 ;
    }
  `) ;
  
  print $thi->call('TEST' , 2) ;

  ...
  
  $thi->use('Data::Dumper') ;
  
  print $thi->call('Data::Dumper::Dumper' , [123 , 456 , 789]) ;
  

Here's an example of an unsynchronized call (detached):

  my $job = $thi->eval_detached(q`
    for(1..5) {
      print "in> $_\n" ;
      sleep(1);
    }
    return 2**3 ;
  `);
  
  $job->wait_to_start ;

  while( $job->is_running ) {
    print "." ;
  }
  
  print $job->returned ;

Thread::Isolate METHODS

new

Create a new Thread::Isolate object.

use (MODULE , ARGS)

call 'use MODULE qw(ARGS)' inside the thread,

eval (CODE , ARGS)

Evaluate a CODE and paste ARGS inside the thread.

eval_detached (CODE , ARGS)

Evaluate detached (unsynchronous) a CODE and paste ARGS inside the thread.

Returns a Thread::Isolate::Job object.

call (FUNCTION , ARGS)

call FUNCTION inside the thread.

call_detached (FUNCTION , ARGS)

call detached (unsynchronous) FUNCTION inside the thread.

Returns a Thread::Isolate::Job object.

shutdown

Shutdown the thread.

exists

Return TRUE if the thread exists.

is_running_any_job

Return TRUE if the thread is running some job.

Thread::Isolate::Job METHODS

When a deteched method is called a job is returned. Here are the methods to use the job object:

is_started

Return TRUE if the job was started.

is_running

Return TRUE if the job is running.

is_finished

Return TRUE if the job was finished.

wait_to_start

Wait until the job starts. (Ensure that the job was started).

wait

Wait until the job is finished. (Ensure that the job was fully executed).

Returns the arguments returneds by the job.

wait_to_finish

Same as wait().

Wait until the job is finished. (Ensure that the job was fully executed).

Returns the arguments returneds by the job.

returned

Returns the arguments returneds by the job. It will wait the job to finish too.

SEE ALSO

Thread::Tie::Thread, threads::shared.

Safe::World.

AUTHOR

Graciliano M. P. <gmpassos@cpan.org>

I will appreciate any type of feedback (include your opinions and/or suggestions). ;-P

This module was inspirated on Thread::Tie::Thread by Elizabeth Mattijsen, <liz at dijkmat.nl>, the mistress of threads. ;-P

COPYRIGHT

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.