Using thread in an asyncronous application
Giampaolo Rodola'
gnewsg at gmail.com
Sat Nov 29 06:27:38 EST 2008
On 29 Nov, 02:24, Aaron Brady <castiro... at gmail.com> wrote:
> On Nov 27, 9:03 am, "Giampaolo Rodola'" <gne... at gmail.com> wrote:
>
>
>
>
>
> > Hi,
> > I'm the maintainer of an asynchronous FTP server implementation based
> > on asyncore.
> > Some days ago I thought it would be interesting to add a class
> > offering the possibility to run the asyncore loop into a thread so
> > that a user can run the server without blocking the entire
> > application.
> > It could be useful, for example, in case someone wants to integrate a
> > GUI.
>
> > Since I'm not good with multi-threaded programming I'd like some
> > opinions about the code I'm going to paste below.
>
> > The FTPServer class that I inherited in my subclass is the
> > "dispatcher" which listens on port 21 dispatching the incoming
> > connection to an "handler".
> > The polling loop (FTPServer.serve_forever()) is wrapped in the run
> > method.
> > As you can see I acquire and release the lock (threading.Lock) every
> > time I call the polling loop.
> > My question is: is that really necessary?
> > Should I expect some weird behavior by running the main loop into a
> > thread like I did?
>
> > Thanks in advance
>
> I found it hard to read through it. Do you have a smaller abstract
> example?- Nascondi testo citato
>
> - Mostra testo citato -
Yeah, sure. I removed all the confusing stuff. Though I didn't tried
it it should work:
class ThreadedFTPServer(FTPServer, threading.Thread):
def __init__(self, address, handler):
FTPServer.__init__(self, address, handler)
threading.Thread.__init__(self)
self.__serving = False
def start(self):
threading.Thread.start(self)
def run(self):
self.__serving = True
while self.__serving:
self.__lock.acquire()
FTPServer.serve_forever(self, timeout=1, count=1)
self.__lock.release()
FTPServer.close_all(self, ignore_all=True)
def stop(self):
if not self.__serving:
raise RuntimeError("Server not started yet")
self.__serving = False
self.join()
--- Giampaolo
http://code.google.com/p/pyftpdlib/
More information about the Python-list
mailing list