Bonjour, j'ai un problème pour comprendre cette exemple d'utilisation des files d'attente dans Python. Voilà le code :
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))
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 : 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')
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 ?