Ich habe ein Python-Programm mit 2 Threads (nennen wir sie 'source' und 'Ziel'). Quellenthread posten manchmal eine Nachricht an Ziel Thread mit einigen Argumenten. Als Ziel Thread wählt eine Nachricht es muss eine entsprechende Funktion mit Argumenten in der Nachricht gespeichert aufrufen.Wie eine Funktion und Argumente in Python-Warteschlange?
Diese Aufgabe kann auf mehrere Arten gelöst werden. Die einfache ist eine große 'if ... if..if' im Nachrichten-Pick-Zyklus des Ziel-Thread und Anruf Funktion nach empfangenen Nachrichtentyp und gespeicherten Argumente. Aber diese wird in riesigen amounf Code (oder große Nachschlagetabelle) führen und das Hinzufügen neuer Nachrichten/Handler-Funktion wird zusätzlichen Schritt entwickeln, um Code in Nachrichtenauswahlzyklus zu schreiben.
Da Python behandelt Funktionen als First-Class-Objekte und haben Tupel, ich will eine Funktion und argumens innerhalb einer Nachricht setzen, so als Ziel Thread eine Nachricht nimmt es nennen nur eine functon innerhalb einer Nachricht ohne gespeichert Wissen, welche Funktion es ist.
I einen Code für einen Funktion mit bestimmten Anzahl von Argumenten schreiben:
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"
Die Frage ist, wie ein Code so modifizieren, kann ich eine Funktion mit in Warteschlange beliebige Anzahl von Argumenten put() ? zum Beispiel HandleAnotherMsg()? Mit q.put ((HandleAnotherMsg, 1, 2, 3)) einen Übersetzungsfehler steigen :(
Können Sie den Fehler posten, den Sie bekommen? –