I am worried about multiple threads colliding, race condtions, in NET::FTP module.
Just create a new instance of Net:FTP in each thread. There should(untested) be no conflicts.
This untested pseudo-code might get you started:
use threads use Thread::Queue use Net::FTP my $Q = new Thread::Queue; sub downloader { my $ftp = Net::FTP->new("some.host.name", Debug => 0) or die "Cannot connect to some.host.name: $@"; $ftp->login("anonymous",'-anonymous@') or die "Cannot login ", $ftp->message; $ftp->cwd("/pub") or die "Cannot change working directory ", $ftp->message; while( my $file = $Q->dequeue ) { $ftp->get( $file ); $ftp->delete( $file ); } $ftp->quit } my @threads = map threads->create( \&downloader ), 1 .. $N; my $ftp = Net::FTP->new("some.host.name", Debug => 0) or die "Cannot connect to some.host.name: $@"; $ftp->login("anonymous",'-anonymous@') or die "Cannot login ", $ftp->message; $ftp->cwd("/pub") or die "Cannot change working directory ", $ftp->message; $Q->enqueue( $ftp->ls ) or die $!; $ftp->quit; $Q->enqueue( (undef) x $N ); $_->join for @threads;
In reply to Re^5: perl -Dusethreads compilation
by BrowserUk
in thread perl -Dusethreads compilation
by mr_p
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |