Bonjour, j'ai un problème pour comprendre cette exemple d'utilisation des files d'attente dans Python. Voilà le code :
En fait, je n'arrive pas à comprendre le déroulement des opérations :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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))
Par exemple, si je charge ce fichier dans l'interpréteur et que je réalise les opérations suivantes :
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 ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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')
Partager