J'en 40 ou donc les threads avec la sous-routine suivante:Est-ce que LWP :: UserAgent n'est pas compatible avec les threads?
my $app = shift;
my $ua = LWP::UserAgent->new();
$ua->timeout(5);
my $response = $ua->get($$app{'watch_url'});
my $new_md5;
if ($response->is_success()) {
$new_md5 = md5_hex($response->content());
}
return ($$app{'short_name'}, $$app{'watch_md5'}, $new_md5);
décharges de base ensuivre environ 3/4 du temps. LWP et LWP :: UserAgent sont de purs Perl, donc je suis pris au dépourvu. LWP :: UserAgent n'est-il pas thread-safe?
Mise à jour:
Voici une version minimale de reproduire le problème:
use strict;
use warnings;
use threads;
use LWP::UserAgent;
sub check_app {
my $ua = LWP::UserAgent->new();
$ua->timeout(5);
$ua->get('http://www.flatdoc.com/?' . rand(10));
}
my @threads;
for (my $i = 0; $i < 40; $i++) {
my $thread = threads->create(\&check_app);
push(@threads, $thread);
}
foreach (@threads) {
$_->join();
}
Je voudrais vérifier Digest :: MD5. Chaque fois que je l'utilise je finis par l'emballer dans un eval. –
J'ai testé le script sans cela et je me suis retrouvé avec les core dumps au même rythme. –
Vous n'utilisez pas Thread :: Pool pour vos discussions êtes-vous? Il semble y avoir un accord sur le fait que ce module peut causer des problèmes. –