http://www.perlmonks.org?node_id=1009669


in reply to Re: Threaded or Forked FTP Backup with chdir
in thread Threaded or Forked FTP Backup with chdir

  1. chdir isn't unique to each thread. If you chdir in one thread they all change.
  2. changing to fork would allow chdir per fork because the memory is copied when forked
  3. This is an excellent point. You can't pass the full path to put but, you can pass a file handle.

Here is the updated code:

sub worker { my $tid = threads->tid; my( $Qwork, $Qresults ) = @_; my $ftp = Net::FTP->new($gFtpServer, Debug => 0); $ftp->login($gFtpUser, $gFtpPass) or print "unable to loging to $gF +tpServer: $ftp->message\n"; while(my $work = $Qwork->dequeue) { my ($result, $localFile); my (@workItem); @workItem = split (",", $work); chomp($workItem[0]); chomp($workItem[1]); chomp($workItem[2]); print "ftp dir: $workItem[0]\n"; print "local dir: $workItem[1]\n"; print "file: $workItem[2]\n"; $localFile = sprintf("%s%s",$workItem[1],$workItem[2]); open (my $fh, "<", $localFile) or print "unable to open file"; $ftp->cwd($workItem[0]) or print "unable to FTP change dir $work +Item[0]: $ftp->message\n"; $ftp->put($fh, $workItem[2]) or print "unable to FTP $workItem[2 +]: $ftp->message\n"; ## Process $work to produce $result ## $result = "$tid : result for workitem "; $Qresults->enqueue( $result ); } $Qresults->enqueue( undef ); ## Signal this thread is finished $ftp->quit; }

Replies are listed 'Best First'.
Re^3: Threaded or Forked FTP Backup with chdir
by BrowserUk (Patriarch) on Dec 20, 2012 at 02:40 UTC
    chdir isn't unique to each thread. If you chdir in one thread they all change.

    Ah yes. I'd forgotten about that difference 'tween Windows and *nix.

    You can't pass the full path to put ...

    Really? Looking inside the module it does a sysopen which handles a fully qualified path just fine on my system.

    ... but, you can pass a file handle.

    Anyway, glad you got a solution.


    With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.

    RIP Neil Armstrong