in reply to Threads Timeout

I took BrowserUk's example and added Time::Out. It returns a slightly different result.
#!/usr/bin/perl -l use strict; use warnings; no warnings 'uninitialized'; use threads; use Time::Out qw(timeout); my (@t) = map( async( sub { my $tid = 'threads'->tid; my $worktime = shift @_; print "Thread $tid started with a worktime of $worktime"; eval { sub test { timeout 10, @_ => sub { print "$_[0]"; }; } }; print "Thread $tid ended ", $@ ? " with error: $@" : "norm +ally"; }, 2 * $_ + $ARGV[0]), 1..4); $_->join foreach (@t);

Replies are listed 'Best First'.
Re^2: Threads Timeout
by BrowserUk (Patriarch) on Jan 21, 2012 at 22:32 UTC
    I took BrowserUk's example and added Time::Out. It returns a slightly different result.

    Not slightly different. Completely different. And wrong.

    Your code isn't doing anything like what you think it is doing. Actually, it isn't doing anything at all.

    This:

    eval { sub test { timeout 10, @_ => sub { print "$_[0]"; }; } };

    evals the sub test into existence, but then it never actually calls that sub.

    • The eval is pointless, because the code inside it can never fail.
    • The code inside the sub is useless, because it is never called.
    • You render the parameter passed to the thread useless, by never using it.

      Which in turn renders the purpose of the demonstration -- showing that the timeout is effective -- useless.

    • You've used a module which itself is useless, because it uses almost 100 lines of code to do what you can standard Perl in 2 lines.

      And with no value add.

    • And you compounded that by using it incorrectly, rendering it even less useful.
    • Your code ends up being the exact equivalent of:
      #! perl -slw use strict do { my $tid = int( rand ); #'threads'->tid; my $worktime = shift @_; print "Thread $tid started with a worktime of $worktime"; print "Thread $tid ended ", $@ ? " with error: $@" : "normally"; } for 1 .. 4;

    In other words, your post is ... I'll let you guess the word I'm thinking of here. (Sorry, but it's true!)

    FWIW: I applaud you for having a go :)


    With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
    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.

    The start of some sanity?