我试图让这两个子例程同时运行。当我解雇该程序时,我最终得到:
Perl exited with active threads:
2 running and unjoined
0 finished and unjoined
0 running and detached
没有任何内容可以打印到控制台上。我期望在(1)保持活跃状态直到SIGTERM。
use threads;
my $t1 = threads->create( \&sub2 );
my $t2 = threads->create( \&sub1 );
sub sub2 {
my $dbh = get_connector();
while (1) {
print "Worker 2 Running";
sleep 2;
}
}
sub sub1 {
while (1) {
print "Worker 1 Running";
sleep 1;
}
}
你能在这里发现缺陷吗?
答案 0 :(得分:4)
在退出流程之前,您永远不会等待孩子们结束。添加
$_->join for threads->list;
答案 1 :(得分:2)
设置
$| = 1;
有无缓冲的输出,并确保你的主线程在其他线程正在执行时做某事,即
sleep 1 while 1;
或等待线程为@ikegami建议
$_->join for $t1, $t2;