在Perl中的Thread::Pool的do子例程中获取作业id



我无法在Perl中获取Thread::Pool的do子例程中的作业id。下面是代码。有人能帮帮我吗?

use strict;
use warnings;
use Thread::Pool;
sub PrintNumbers( $ )
{
    my $num = shift;
    my $id = Thread::Pool->jobid;
    print "$id => $numn";
}
my $pool = Thread::Pool->new(
    {
        optimize => 'cpu',
        do => &PrintNumbers,
        workers => 2,
        maxjobs => 4
    }
);
$pool->job( $_ ) foreach (  1..100 );
$pool->shutdown;
我得到了答案。

而不是

 my $id = Thread::Pool->jobid;

添加

 my $id = threads->tid();

它工作正常。。

如果作业创建者不保留作业ID,则作业ID是无用的,因此当作业创建者丢弃它们时,它们会自毁。

如果你需要作业ID,你必须保存它们,这样做可以解决你的问题。

my %job_ids;
$job_ids{$_} = $pool->job($_) for 'a'..'z';

输出:

1 => a
2 => b
3 => c
...

相关内容

  • 没有找到相关文章

最新更新