On 14 Gen, 12:30, Nick Craig-Wood <[EMAIL PROTECTED]> wrote: > Giampaolo Rodola' <[EMAIL PROTECTED]> wrote: > > I'm trying to run an asynchronous FTP server I wrote into a thread for > > being able to run a test suite against it. > > The code below is the threaded FTP server code I'm using: > > > class FTPd(threading.Thread): > > > def __init__(self): > > self.active = False > > threading.Thread.__init__(self) > > > def start(self, flag=None): > > assert not self.active > > self.flag = flag > > threading.Thread.start(self) > > > def run(self): > > assert not self.active > > ftpd = ftpserver.FTPServer(address, ftp_handler) > > if self.flag: > > self.flag.set() > > self.active = True > > while self.active: > > ftpd.server_forever(timeout=1, count=1) > > ftpd.close() > > > def stop(self): > > assert self.active > > self.active = False > > > flag = threading.Event() > > ftpd = FTPd() > > ftpd.start(flag) > > flag.wait() # wait for it to start > > unittest.main() # run the test suite > > ftpd.stop() > > > Sometimes I get a strange error when all the tests have finished, the > > server is stopped and Python is exiting: > > > Ran 50 tests in 1.515s > > > OK > > Exception exceptions.TypeError: "'NoneType' object is not callable" in > > <bound me > > thod FTPHandler.__del__ of <pyftpdlib.ftpserver.FTPHandler connected > > 127.0.0.1:2 > > 249 at 0xa4b080>> ignored > > Exception exceptions.TypeError: "'NoneType' object is not callable" in > > <bound me > > thod FTPServer.__del__ of <pyftpdlib.ftpserver.FTPServer listening > > 127.0.0.1:543 > > 21 at 0x9e1a30>> ignored > > > I sincerely don't know why that happens but it's likely because I'm > > not using threads properly. > > My concern is that this could be caused by a sort of race condition > > (e.g. Python tries to exit when ftpd.close call is not yet > > completed). > > It looks like when python is shutting down, it has removed an object > the ftphandler code relies on. > > I see you attempt to kill the ftp server with ftpd.stop(). That is > good, but you don't wait for the thread to finish (it might take up to > a second in ftpd.server_forever if I understand correctly). > > I expect if you put a self.join() at the end of the stop() method the > problem will go away. > > -- > Nick Craig-Wood <[EMAIL PROTECTED]> --http://www.craig-wood.com/nick- > Nascondi testo tra virgolette - > > - Mostra testo tra virgolette -
Tried it but the problem remains. The strange thing is that it sometimes happens, sometimes doesn't. -- http://mail.python.org/mailman/listinfo/python-list