in reply to Re^4: perl -Dusethreads compilation
in thread perl -Dusethreads compilation
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;
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^6: perl -Dusethreads compilation
by mr_p (Scribe) on Apr 05, 2010 at 17:05 UTC | |
by BrowserUk (Patriarch) on Apr 05, 2010 at 18:39 UTC | |
by mr_p (Scribe) on Apr 05, 2010 at 20:45 UTC | |
by BrowserUk (Patriarch) on Apr 05, 2010 at 21:07 UTC | |
by mr_p (Scribe) on Apr 05, 2010 at 22:04 UTC | |
|