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

$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 -Dlibperl=libperl.so +.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/libc-2.7.so, so=so, useshrplib=true, libperl=libperl.so. +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.
    Update:
    <$thr->is_running()
    Returns true if a thread is still running (i.e., if its entry point function has not yet finished or exited).
    $thr->is_joinable()
    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.
    threads->list()
    threads->list(threads::all)
    threads->list(threads::running)
    threads->list(threads::joinable)
    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).
    Raghu
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/is_running.al 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 thread.pl line 15

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://777702]
Approved by GrandFather
help
Chatterbox?
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
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Notices?