J'ai un programme python avec 2 threads (appelons-les 'source' et 'destination'). Le fil de départ envoie parfois un message au fil de destination avec quelques arguments. Le thread de destination sélectionne un message. doit appeler une fonction correspondante avec les ar- tives enregistrées dans le message.comment mettre une fonction et des arguments dans la file d'attente python?
Cette tâche peut être résolue de plusieurs façons. Le facile est de mettre un grand 'if ... if ... if' dans le cycle de sélection de message du thread de destination et d'appeler fonction en fonction du type de message reçu et des arguments sauvegardés. Mais cette se traduira par un énorme amounf de code (ou grande table de recherche) et l'ajout de nouveaux messages /fonction de gestionnaire évoluera étape supplémentaire pour écrire le code dans cycle de sélection de message.
Depuis python traite des fonctions comme des objets de première classe et ont tuples, je veux mettre une fonction et argumens dans un message, de sorte que les fils de destination prend un message, il suffit d'appeler un functon enregistré dans un message sans connaissance quelle est la fonction.
Je peux écrire un code pour une des fonctions avec le nombre spécifié d'arguments:
from Queue import *
from thread import *
from time import *
q = Queue()
def HandleMsg(arg1, arg2) :
print arg1, arg2
def HandleAnotherMsg(arg1, arg2, arg3) :
print arg1, arg2, arg3
def DestinationThread(a) :
while True :
(f, a, b) = q.get()
f(a, b)
start_new_thread(DestinationThread, (0,))
print "start"
sleep(1)
q.put((HandleMsg, 1, 2))
sleep(1)
print "stop"
La question est: comment modifier un code afin que je puisse mettre() une fonction avec un nombre quelconque d'arguments dans la file d'attente ? par exemple HandleAnotherMsg()? En utilisant q.put ((HandleAnotherMsg, 1, 2, 3)) va augmenter une erreur de compilation :(
Pouvez-vous poster l'erreur que vous obtenez? –