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

$thread->done() in perl 5.8.8 - catching slow threads

by brycen (Monk)
on Jul 06, 2009 at 22:48 UTC ( #777702=perlquestion: print w/replies, xml ) Need Help??

brycen has asked for the wisdom of the Perl Monks concerning the following question:

I have a monitoring application that wants to alert if a certain I/O operation takes too long to complete. I have an old Threads (5005threads) implementation, but ran into a machine the Perl 5.8.8 which has only ithreads. Perl 5.8.8 ithreads seems to have no "is_done" status checking available.

How can I do this? Remember I can't wait for the thread to finish... that would miss the whole point.

#!/usr/bin/perl use strict; use warnings; use threads; use Data::Dumper; my $thread1 = threads::async { my $sleep = int(rand() * 10); sleep($sleep); return($sleep); }; sleep(2); # if( $thread1->is_running() ) { # email("alert"); # } else { # print "Thread finished in time, no problem\n"; # } print "Thread eventually returned ".$thread1->join()."\n"; print "Exit\n";

$ perl -V Summary of my perl5 (revision 5 version 8 subversion 8) configuration: Platform: osname=linux, osvers=2.6.24-19-server, archname=i486-linux-gnu-thr +ead-multi uname='linux palmer 2.6.24-19-server #1 smp sat jul 12 00:40:01 ut +c 2008 i686 gnulinux ' config_args='-Dusethreads -Duselargefiles -Dccflags=-DDEBIAN -Dccc +dlflags=-fPIC -Darchname=i486-linux-gnu -Dprefix=/usr -Dprivlib=/usr/ +share/perl/5.8 -Darchlib=/usr/lib/perl/5.8 -Dvendorprefix=/usr -Dvend +orlib=/usr/share/perl5 -Dvendorarch=/usr/lib/perl5 -Dsiteprefix=/usr/ +local -Dsitelib=/usr/local/share/perl/5.8.8 -Dsitearch=/usr/local/lib +/perl/5.8.8 -Dman1dir=/usr/share/man/man1 -Dman3dir=/usr/share/man/ma +n3 -Dsiteman1dir=/usr/local/man/man1 -Dsiteman3dir=/usr/local/man/man +3 -Dman1ext=1 -Dman3ext=3perl -Dpager=/usr/bin/sensible-pager -Uafs - +Ud_csh -Ud_ualarm -Uusesfio -Uusenm -Duseshrplib +.5.8.8 -Dd_dosuid -des' hint=recommended, useposix=true, d_sigaction=define usethreads=define use5005threads=undef useithreads=define usemulti +plicity=define useperlio=define d_sfio=undef uselargefiles=define usesocks=undef use64bitint=undef use64bitall=undef uselongdouble=undef usemymalloc=n, bincompat5005=undef Compiler: cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS +-DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE +_SOURCE -D_FILE_OFFSET_BITS=64', optimize='-O2', cppflags='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -DDEBIAN +-fno-strict-aliasing -pipe -I/usr/local/include' ccversion='', gccversion='4.2.3 (Ubuntu 4.2.3-2ubuntu7)', gccosand +vers='' intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234 d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=1 +2 ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', + lseeksize=8 alignbytes=4, prototype=define Linker and Libraries: ld='cc', ldflags =' -L/usr/local/lib' libpth=/usr/local/lib /lib /usr/lib libs=-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt perllibs=-ldl -lm -lpthread -lc -lcrypt libc=/lib/, so=so, useshrplib=true, +5.8.8 gnulibc_version='2.7' Dynamic Linking: dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E' cccdlflags='-fPIC', lddlflags='-shared -L/usr/local/lib' Characteristics of this binary (from libperl): Compile-time options: MULTIPLICITY PERL_IMPLICIT_CONTEXT PERL_MALLOC_WRAP THREADS_HAVE_PIDS USE_ITHREAD +S USE_LARGE_FILES USE_PERLIO USE_REENTRANT_API Built under linux

Replies are listed 'Best First'.
Re: $thread->done() in perl 5.8.8 - catching slow threads
by imrags (Monk) on Jul 07, 2009 at 07:21 UTC
    "Tid" is the thread id which is unique and is given to each thread
    thread->list returns a list of thread objects, one for each thread that's currently running
    foreach my $thr (threads->list()) { ##DO something }
    Read Threads for more information, it's not best but you can refer it for list purpose.
    Returns true if a thread is still running (i.e., if its entry point function has not yet finished or exited).
    Returns true if the thread has finished running, is not detached and has not yet been joined.
    In other words, the thread is ready to be joined, and a call to $thr->join() will not block.
    With no arguments (or using threads::all ) and in a list context, returns a list of all non-joined,
    non-detached threads objects. In a scalar context, returns a count of the same.
    With a true argument (using threads::running ), returns a list of all non-joined,
    non-detached threads objects that are still running.
    With a false argument (using threads::joinable ), returns a list of all non-joined, non-detached
    threads objects that have finished running (i.e., for which ->join() will not block).
Re: $thread->done() in perl 5.8.8 - catching slow threads
by BrowserUk (Patriarch) on Jul 07, 2009 at 04:41 UTC

    What's wrong with the commented lines in your code? Ie. What are they not doing that you want them to do?

    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.
      is_running() is not implemented in Perl 5.8.8. And I can't upgrade to 5.10
        Can't locate auto/threads/ in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.8.8 /usr/local/share/perl/5.8.8 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.8 /usr/share/perl/5.8 /usr/local/lib/site_perl .) at line 15

Log In?

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://777702]
Approved by GrandFather
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others wandering the Monastery: (4)
As of 2022-12-01 06:45 GMT
Find Nodes?
    Voting Booth?