Gibt es eine eingebaute Syntax in Python, die es mir erlaubt, eine Nachricht an bestimmte Python-Thread innerhalb meines Problems zu posten? Wie 'in Warteschlange gestelltes Signal' in pyQt oder :: PostMessage() in Windows. Ich brauche dies für die asynchrone Kommunikation zwischen Programmteilen: Es gibt eine Reihe von Threads, die Netzwerkereignisse verarbeiten, und sie müssen diese Ereignisse in einen einzelnen "Logik" -Thread posten, der Ereignisse sicher Single-Threaded übersetzt.Gibt es in Python eingebaute Cross-Thread-Ereignisse?
Antwort
Das Queue Modul ist Python ist gut geeignet, was Sie beschreiben.
Sie könnten eine Warteschlange einrichten, die zwischen all Ihren Threads geteilt wird. Die Threads, die die Netzwerkereignisse verarbeiten, können queue.put verwenden, um Ereignisse in die Warteschlange zu stellen. Der Logik-Thread würde mit queue.get Ereignisse aus der Warteschlange abrufen.
import Queue
# maxsize of 0 means that we can put an unlimited number of events
# on the queue
q = Queue.Queue(maxsize=0)
def network_thread():
while True:
e = get_network_event()
q.put(e)
def logic_thread():
while True:
# This will wait until there are events to process
e = q.get()
process_event(e)
Ich bin nicht wirklich sicher, wonach Sie suchen. Dafür gibt es aber keine eingebaute Syntax. Sehen Sie sich die Module queue und threading an. Es gibt eine Menge hilfreicher Dinge wie Warteschlangen, Bedingungen, Ereignisse, Sperren und Semaphore, die verwendet werden können, um alle Arten von synchronen und asynchronen Kommunikationen zu implementieren.
Ich bin auf der Suche nach einer einfachen Möglichkeit, eine Funktion in einem Thread aufzurufen, und die verknüpfte Funktion wird in einem anderen Thread (in der Warteschlange eingereihter Delegat) aufgerufen. Synchronisations-Primitive werden alles von Hand machen, das ist viel Code? – grigoryvp
@Eye of Hell: Bitte lesen Sie tatsächlich die Warteschlangenmodul-Dokumentation. Was als "Aufruf einer Funktion" zwischen Threads erscheint, ist normalerweise eine Warteschlange von Anforderungen, die von einem Thread an einen anderen übergeben werden; Der empfangende Thread entnimmt die Anforderung und ruft die Funktion auf. –
ah, ich erinnere mich, Funktion ist ein erstklassiges Objekt in Python? (eingebaute Delegierte). Ist es eine wohlbekannte Syntax, um einen 'Funktionsaufruf' in die Warteschlange zu stellen und tatsächlich im aktuellen Thread aus der Warteschlange herauszuholen? Und was ist mit Funktionsargumenten? – grigoryvp
- 1. Gibt es eine eingebaute Funktion wie Perls Splice in Python?
- 2. Geometric Mean: Gibt es eine eingebaute?
- 3. Erweitern Python eingebaute Str
- 4. Gibt es eine eingebaute Suchleiste in den GoogleMaps?
- 5. Gibt es in CUDA eingebaute Cross- und Dot-Produkte?
- 6. Gibt es eine eingebaute Funktion, um eine Zahl in bestimmten Bereich in Python zu halten?
- 7. Gibt es eine eingebaute Funktionsversion von `and` und/oder` or` in Python?
- 8. Wie HTML codieren/escape eine Zeichenfolge? Gibt es eine eingebaute?
- 9. Eigen: Gibt es eine eingebaute Möglichkeit, Probe Kovarianz
- 10. Gibt es eine eingebaute Funktion für lesbare F # -Angebote?
- 11. Einige eingebaute pad eine Liste in Python
- 12. Gibt es Funktionen in Python?
- 13. Gibt es Module oder eingebaute Funktionen, um in Ruby Fehlerberichte zu erstellen?
- 14. (Python C API) PyRun_StringFlags fehlen eingebaute Funktionen?
- 15. Eintrag eingebaute Funktionen und Methoden (Python)
- 16. eingebaute Funktion für die Berechnung Überlappung in Python
- 17. Gibt es in Intuits Wasabi eingebaute Schlüssel, die ich in meinen Segmentierungsregeln verwenden kann?
- 18. Convert eingebaute Funktion Typ Methodentyp (in Python 3)
- 19. Gibt es eine Python-Sprachspezifikation?
- 20. Jinja - Gibt es eine eingebaute Variable, um den aktuellen HTML-Seitennamen zu erhalten?
- 21. Python - Gibt es Graph Digitizer?
- 22. Gibt es in Python einen Vector3-Typ?
- 23. Gibt es tatsächlich Unionstypen in Python?
- 24. Gibt es Web-Server-Module in Python?
- 25. Gibt es ein "do ... bis" in Python?
- 26. Gibt es in Python einen "ungleich" Operator?
- 27. Gibt es in Python einen logischen Operator?
- 28. Gibt es Alternativen zu Mechanize in Python?
- 29. Gibt es in Python einen Mehrfachformat-Bezeichner?
- 30. Gibt es eine SessionInfo() Entsprechung in Python?
Danke! ist es eine Möglichkeit, einen Funktionsaufruf in ein Ereignis einzufügen? Tatsächliche Threadcode-Aufruffunktionen, wie PostConnectionStatus (STATUS) und Worker-Thread, weisen Handler wie OnConnectionStatus (i_status) auf. Ist es möglich, Funktionsaufrufe automatisch mit einem Ereignis zu verknüpfen? – grigoryvp
In Python sind Funktionen Objekte wie alles andere und können daher genau wie andere Objekte weitergegeben werden. Sie können also auch eine Funktion anhängen, die mit dem Ereignis aufgerufen wird, wie q.put ((e, PostConnectionStatus)). Ihr logischer Thread könnte dann "e, func = q.get()" tun. Hilft das? –
sicher, danke. Variable Anzahl von Argumenten kann auf dieselbe Weise gemarshallt werden? – grigoryvp