[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
四线程+队列,Mojo 本身支持多线程,不过还没学会
  1. =info
  2.     4线程+队列
  3.     523066680@163.com
  4. =cut
  5. use Modern::Perl;
  6. use Encode;
  7. use threads;
  8. use threads::shared;
  9. use Thread::Queue;
  10. use File::Basename;
  11. use URI::Escape;
  12. use Mojo::UserAgent;
  13. STDOUT->autoflush(1);
  14. my @ths;
  15. my $que = Thread::Queue->new();    # A new empty queue
  16. my $link = "http://pmmp.cnki.net/OperatingDiscipline/Details.aspx?id=";
  17. my @mission = map { sprintf "%s%04d", $link, $_ } (1 .. 2150);
  18. #创建线程
  19. grep { push @ths, threads->create( \&thread_func, $_ ) } ( 0..3 );
  20. $que->enqueue( @mission );
  21. $que->end();
  22. grep { $_->join() } @ths;
  23. exit;
  24. sub thread_func
  25. {
  26.     my ( $id ) = shift;
  27.     my ($link, $file, $res, $dom);
  28.     my $ua = Mojo::UserAgent->new();
  29.     $ua = $ua->max_redirects(5);
  30.     while (defined(my $link = $que->dequeue()))
  31.     {
  32.         $file = basename( $link );
  33.         $res = $ua->get( $link )->result;
  34.         $res->body =~/(http.*?.pdf)/;
  35.         $link = encode('gbk', decode('utf8', uri_unescape($1)));
  36.         say $link;
  37.     }
  38. }
复制代码
结果见附件

TOP

返回列表