[Tutor] stopping threads?
Pierre Barbier de Reuille
pierre.barbier at cirad.fr
Thu Sep 29 08:27:42 CEST 2005
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 - Tutor at python.org
> 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
More information about the Tutor
mailing list