Hello Marcus, Marcus Goldfish a écrit : > I'm a little confused about threading in Python. Here is a sample class I've > written for monitoring for events. Included in the comments are a couple of > questions, specifically: > (1) can I use super() in the constructor, or is direct call to base class > preferred?
IMO, it is better to explicitely call the base class ... I think it is more readable. But I don't know if there is any drawback for any solution... > (2) do I need to sleep in the run() method? If so, why? It seems to improve > my programs responsiveness Yes, you need to sleep ! What you're doing is called "polling", you have an infinite loop watching some state. If you don't wait, you'll use your processor 100% for ... nothing ! Global responsiveness will decrease as your program will always ask the OS for run-time ! Now, if you sleep, you will test the state once, let other threads/process run and watch some other time... 0.1 sec is quite a long time for processes and so short for us ;) So if you need human-time responsiveness, you definitely need this sleep. However, you may consider other way of blocking/watching like using events or semaphors. So that your thread will be blocked until someone releases it by sending the event or releasing the semaphor. > (3) what happens after run() finishes-- does the thread die, get suspended, > go away? Should I try to force the thread into one of these states, and if > so how? Yop ! after run() finishes, the thread dies. This is the normal way to finish a thread ... just end its main function :) > Any help is appreciated! > Thanks, > Marcus > class Monitor(threading.Thread): > def __init__(self): > threading.Thread.__init__(self) # would super() also work here? which is > preferred > self.undetected = True # presumably, when the event occurs it sets this > attribute to False > def run(self): > print "looking for event" > while self.undetected is True: > time.sleep(0.1) # another minor point: why do I need to sleep here? > self.processEvent() > # what happens here-- does the thread die? > def processEvent(self): > print "yeah-- event detected" > > > > ------------------------------------------------------------------------ > > _______________________________________________ > Tutor maillist - [email protected] > http://mail.python.org/mailman/listinfo/tutor -- Pierre Barbier de Reuille INRA - UMR Cirad/Inra/Cnrs/Univ.MontpellierII AMAP Botanique et Bio-informatique de l'Architecture des Plantes TA40/PSII, Boulevard de la Lironde 34398 MONTPELLIER CEDEX 5, France tel : (33) 4 67 61 65 77 fax : (33) 4 67 61 56 68 _______________________________________________ Tutor maillist - [email protected] http://mail.python.org/mailman/listinfo/tutor
