Re: [Pyobjc-dev] FTP Lib with a Cocoa application
Brought to you by:
ronaldoussoren
From: Rob <rob...@gm...> - 2009-09-08 04:41:04
|
Bit more... Thinking this is a threading issue, I tried to write a facade that extends NSObject and my FTPFile(thread) object (e.g. class FTPFileFacade(NSObject, FTPFile):) and tried to call self.performSelectorInBackground_withObject_('startUpload:', None) to try to use NSThread instead (I think). Doing this results in the same behavior where it gets to the upload step in FTP, and then just hangs. If, however, I use self.performSelectorOnMainThread_withObject_waitUntilDone_('startUpload:',None, False) The FTP works properly, but again hangs the UI until the file is uploaded (because I am using the main thread I would imagine). I have to be missing something easy - any suggestions? (I don't want to have to scrap this projects use of python and re-write the mac client in objective-c as that defeats the whole purpose of us using python in the first place) Thanks for any help, rob On Tue, Sep 8, 2009 at 11:06 AM, Rob <rob...@gm...> wrote: > One more bit of information: > if I call the threaded bit with: worker.run() instead of worker.start() > the FTP works as I want it, but it hangs the UI while doing the transfer. > > > > On Tue, Sep 8, 2009 at 10:49 AM, Rob <rob...@gm...> wrote: > >> My apologies if this has already been discussed / answered, but I >> couldn't figure out how to search the archives. >> I am writing a Cocoa based FTP uploading application using ftplib and >> threading and I've hit a bit of a snag. I am sure it is something I am >> doing wrong, but I wanted to check to see if I am way off. >> >> What appears to be happening is when I run the application within the >> Cocoa GUI the FTP uploading part hangs when it tries to do the upload >> (staring it's own thread I am assuming). I am guessing it's a "thread in a >> thread" issue? (total guess obviously) >> >> When I run the threaded library directly from __main__ on the command >> line, with FTP set to debug I get the following: >> >> *cmd* 'TYPE I' >> *put* 'TYPE I\r\n' >> *get* '200 Type set to I\r\n' >> *resp* '200 Type set to I' >> *cmd* 'PASV' >> *put* 'PASV\r\n' >> *get* '227 Entering Passive Mode (xxx,xxx,xxx,212,4,3)\r\n' >> *resp* '227 Entering Passive Mode (xxx,xxx,xxx,212,4,3)' >> *cmd* 'STOR TestFile.mov' >> *put* 'STOR TestFile.mov\r\n' >> *get* '150 Connection accepted\r\n' >> *resp* '150 Connection accepted' >> *get* '226 Transfer OK\r\n' >> *resp* '226 Transfer OK' >> *cmd* 'QUIT' >> *put* 'QUIT\r\n' >> *get* '221 Goodbye\r\n' >> *resp* '221 Goodbye' >> Done. >> >> However when I run the same code within Cocoa I get the following: >> >> **cmd* 'TYPE I'* >> >> **put* 'TYPE I\r\n'* >> >> **get* '200 Type set to I\r\n'* >> >> **resp* '200 Type set to I'* >> >> **cmd* 'PASV'* >> >> **put* 'PASV\r\n'* >> >> **get* '227 Entering Passive Mode (xxx,xxx,xxx,212,4,4)\r\n'* >> >> **resp* '227 Entering Passive Mode (xxx,xxx,xxx,212,4,4)'* >> >> And it just hangs there. It never gets to the next line. >> >> The library that does this is a threaded class: class FTPFile(Thread): >> that just runs a typical ftp connection and upload in the run method: >> >> def run(self): >> >> ftp = FTP( >> >> self.config.server, >> >> self.config.username, >> >> self.config.password) >> >> etc, etc >> >> I can FTP via the command line "ftp" application, and, like I said, when I >> run the library directly so I don't think it's a server problem. Is there >> something I may have missed when creating the Cocoa app? Do I have to >> explicitly allow FTP connections or something (I also have the firewall >> off)? Or is this a known issue with Cocoa+Python? >> >> Thanks for any help, >> rob >> >> -- >> http://robrohan.com >> http://twitter.com/robrohan >> > > > > -- > http://robrohan.com > http://twitter.com/robrohan > -- http://robrohan.com http://twitter.com/robrohan |