gpt4 book ai didi

multithreading - 尝试处理 100 个 URL 请求。我应该使用 perl CPAN HTTP::Async 吗?魔力?

转载 作者:行者123 更新时间:2023-12-04 06:50:51 27 4
gpt4 key购买 nike

关闭。这个问题需要更多focused .它目前不接受答案。












想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post .

4年前关闭。




Improve this question




我正在尝试创建一个可以一次连接到 100 个 URL 的程序,并且根据每个连接的输出(即 HTTP 连接成功),perl 脚本将转到函数 x 或其他什么。我能想到的最好的就是这个脚本。但我希望它同时或并行连接到 100 个 URL,每个 URL 都返回一个响应(所以我应该在 LWP 超时结束时得到 100 个左右)来弄清楚我接下来想要做什么。但是,我见过的大多数示例都倾向于一次执行一个 URL。它可能会以 20-30 的速度运行,但如果一个下降,那就是减速真正开始的地方。

use Mojo::Client;
use Mojo::Transaction;

my $client = Mojo::Client->new;

my $tx = Mojo::Transaction->new_get('http://labs.kraih.com');
my $tx2 = Mojo::Transaction->new_get('http://mojolicious.org');
$tx2->req->headers->expect('100-continue');
$tx2->req->body('foo bar baz');

$client->process_all($tx, $tx2);

print $tx->res->code;
print $tx2->res->code;
print $tx2->res->content->file->slurp;

但是,它为每笔交易创建了变量。如果我要创建 100 个站点,创建 $tx1 - $tx 100 会很痛苦。

提前致谢。

最佳答案

这是我的基本建议:为每个 url 创建一个进程,并让该进程独立于其他进程处理它。
请注意,如果您需要登录,所有进程都可以共享一个文件句柄。

#!/usr/bin/perl

use strict;use warnings;

my @url = ('url1','url2','url3');

my $pid;
my $url_to_process;

foreach my $url (@url) {
$pid = fork; #create new process.
unless ($pid) {
$url_to_process = $url;
last;
} #end loop if we are a child
}

unless ($pid) {
print "$$: $url_to_process\n"; # or do anything you like with the url
}

关于multithreading - 尝试处理 100 个 URL 请求。我应该使用 perl CPAN HTTP::Async 吗?魔力?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41091219/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com