Just use threads and Thread::Queue to distribute the batches:
use strict; use threads; use Thread::Queue; use Net::SMTP; my @servers = qw(192.168.0.1 192.168.0.2 192.168.0.3); my @addresses = read_addresses_from_file(); my $queue = Thread::Queue->new(); # Now put 10 addresses into one batch: while (@addresses) { my @batch = splice @addresses, 0, 10; $queue->enqueue(\@batch); }; my @workers = map { my $s = $_; $queue->enqueue(undef); threads->creat +e( sub { my ($ip) = @_; my $server = Net::SMTP->new( $ip ); while (my $batch = $queue->dequeue(1)) { print "Sending to $ip: @$batch\n"; sleep rand 10; # ... send using $server ... }; print "Sending to $ip done\n"; }, $s ) } @servers; for (@workers) { $_->join; }; print "All done.";
In reply to Re: Net::SMTP newsletter
by Corion
in thread Net::SMTP newsletter
by commonlybon
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |