[Thread et files d'attente]Problème de compréhension
Bonjour, j'ai un problème pour comprendre cette exemple d'utilisation des files d'attente dans Python. Voilà le code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
import threading, Queue
class InterfaceExterne(threading.Thread):
def __init__(self, externalCallable, **kwds):
threading.Thread.__init__(self, **kwds)
self.setDaemon(1)
self.externalCallable = externalCallable
self.workRequestQueue=Queue.Queue()
self.resultQueue = Queue.Queue()
self.start()
def request(self, *args, **kwds):
"Appelee par les autres threads comme le serait externalCallable"
self.workrequestQueue.put((args,kwds))
return self.resultQueue.get()
def run(self):
while 1:
try : arg, kwd = self.worRequestQueue.get_nowait()
except Queue.Empty : pass
else : self.resultQueue.put(self.externalCallable(*args, **kwds)) |
En fait, je n'arrive pas à comprendre le déroulement des opérations :
Par exemple, si je charge ce fichier dans l'interpréteur et que je réalise les opérations suivantes :
Code:
1 2 3 4 5 6 7
|
def dire_bonjour_a(nom):
print 'bonjour' + str(nom)
return 'j\'ai dit bonjour'
thread_bonjour = InterfaceExterne(dire_bonjour_a)
thread_bonjour.request('monde') |
Quand un appel à thread_bonjour.request('monde') est fait, j'ai du mal à comprendre comment la file d'attente va fonctionner, parce que je ne comprends pas comment la méthode self.request() peut retourner un résultat si la méthode run() n'a pas pris connaissance de la requête. Pouvez-vous m'expliquer comment cela fonctionne ?