perl getstore在线程中

时间:2017-01-20 07:19:10

标签: multithreading perl

在以下脚本中:

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();
});

当我启动它时它不会保存图像,但如果我启动相同的代码而不是在线程中它可以工作,为什么?

1 个答案:

答案 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可能会更有效率。