在以下脚本中:
use strict;
use warnings;
use LWP::Simple;
use threads;
threads->create(sub {
my $url = "http://www.example.com/logo.jpg";
my $file = "/var/www/html/logo.jpg";
getstore($url, $file);
threads->detach();
});
当我启动它时它不会保存图像,但如果我启动相同的代码而不是在线程中它可以工作,为什么?
答案 0 :(得分:2)
因为"分离"没有做你期望的事情。程序退出时终止分离的线程。 From the docs...
$ thr->分离()
使线程无法加入,并导致丢弃任何最终返回值。 当程序退出时,任何仍在运行的分离线程都会以静默方式终止。
你应该得到这样的信息。
Perl exited with active threads:
1 running and unjoined
0 finished and unjoined
0 running and detached
您应该等到程序结束时所有线程都完成,而不是分离。
for my $thread (threads->list(threads::running)) {
$thread->join;
}
如果您想要的是并行HTTP请求,则不需要线程。 LWP::Parallel可能会更有效率。