我得到了答案。
我无法在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
...