Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine
 
PerlMonks  

Re^2: Threaded or Forked FTP Backup with chdir

by Mimir (Initiate)
on Dec 20, 2012 at 02:20 UTC ( #1009669=note: print w/ replies, xml ) Need Help??


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; }


Comment on Re^2: Threaded or Forked FTP Backup with chdir
Download Code
Re^3: Threaded or Forked FTP Backup with chdir
by BrowserUk (Pope) 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

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1009669]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others musing on the Monastery: (5)
As of 2014-11-29 02:35 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My preferred Perl binaries come from:














    Results (203 votes), past polls