Esiste una sintassi incorporata in python che mi permetta di inviare un messaggio a un thread python specifico all'interno del mio problema? Come "segnale connesso in coda" in pyQt o :: PostMessage() in Windows. Ho bisogno di questo per la comunicazione asincrona tra le parti del programma: c'è un numero di thread che gestiscono gli eventi di rete e hanno bisogno di postare questi eventi su un singolo thread 'logico' che traduce gli eventi in modo sicuro a thread singolo.Esistono eventi cross-thread incorporati in python?
risposta
Il modulo Queue è python che ben si adatta a ciò che si sta descrivendo.
È possibile impostare una coda condivisa tra tutti i thread. I thread che gestiscono gli eventi di rete possono utilizzare queue.put per inviare eventi sulla coda. Il thread logico utilizza queue.get per recuperare gli eventi dalla coda.
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)
Non sono proprio sicuro di cosa stiate cercando. Ma non esiste certamente una sintassi integrata per questo. Dai uno sguardo ai moduli queue e threading. Ci sono molte cose utili come code, condizioni, eventi, serrature e semafori che possono essere utilizzate per implementare ogni tipo di comunicazione sincrona e asincrona.
sto cercando un modo semplice per chiamare una funzione in un thread e la funzione collegata verrà chiamata in un altro thread (delegato in coda). Le primitive di sincronizzazione forzeranno a fare tutto 'a mano' che è un sacco di codice? – grigoryvp
@Eye of Hell: Si prega di leggere effettivamente la documentazione del modulo code. Quello che sembra essere "chiamare una funzione" tra i thread è solitamente una coda di richieste passate da un thread all'altro; il thread di ricezione rimuove la richiesta e chiama la funzione. –
ah, ricordo, la funzione è un oggetto di prima classe in python? (delegati incorporati). È una sintassi nota a weel per mettere in coda una "chiamata di funzione" e fare una chiamata effettiva su dequeue nel thread attuale? E per quanto riguarda gli argomenti della funzione marshalling? – grigoryvp
- 1. Esistono linguaggi di script incorporati e tipizzati in modo statico?
- 2. Esistono suoni incorporati/predefiniti che possono essere utilizzati in un'app?
- 3. Esistono analoghi leggeri a CORBA/RPC per programmi incorporati?
- 4. Tipi di sottoclassi incorporati in Python 2 e Python 3
- 5. Javascript: carica gli eventi per gli elementi incorporati
- 6. I contenitori Python incorporati sono thread-safe?
- 7. Can "riferimenti software" esistono in Python?
- 8. Esistono variabili basate sullo stack in Python?
- 9. Esistono alternative a Mechanize in Python?
- 10. Consumare eventi COM in Python
- 11. Esistono metodi incorporati in Java per aumentare le dimensioni dei caratteri?
- 12. Esistono generiche librerie Python che forniscono funzionalità di 'segnali' (eventi) come i segnali di Django?
- 13. Symfony2 - Reindirizza la risposta dalla richiesta EventListener in modalità dev ignorando gli eventi di richiesta incorporati
- 14. Python: perché esistono int.numerator e int.denominator?
- 15. Come si studia l'implementazione di Python dei metodi incorporati?
- 16. Gtk3 ProgressBar(): impossibile ricevere eventi in Python
- 17. Framework di eventi per Python?
- 18. Esistono funzioni di corrispondenza dei modelli in Python come questo?
- 19. Perché entrambi i moduli sre e re esistono in Python?
- 20. Python 3, Esistono falle di sicurezza conosciute in ast.literal_eval (node_or_string)?
- 21. Esistono buone strutture di compilazione scritte in Python?
- 22. Perché esistono metodi ridondanti per importare in Python?
- 23. MongoDB incorporati oggetti polimorfici
- 24. Symfony 2 moduli incorporati
- 25. Comandi incorporati WPF
- 26. Esistono equivalenti al futex in Linux/Unix?
- 27. Cosa sono i binari incorporati in Xcode?
- 28. documenti Factory Girl + Mongoid incorporati in apparecchi
- 29. Dati persistenti HSQLDB incorporati in un file
- 30. Record incorporati in ember-data 1.0 beta
Grazie! è un modo per inserire una chiamata di funzione all'interno di un evento? Funzioni di chiamata codice thread reali, come PostConnectionStatus (STATUS) e thread di lavoro con gestori come OnConnectionStatus (i_status). È in qualche modo possibile effettuare il marshalling delle chiamate automaticamente con un evento? – grigoryvp
In Python, le funzioni sono oggetti come tutto il resto e quindi possono essere passate come gli altri oggetti. Pertanto, è possibile allegare una funzione da chiamare con l'evento, ad esempio q.put ((e, PostConnectionStatus)). Il thread logico potrebbe quindi eseguire "e, func = q.get()". Questo aiuto? –
sicuro, grazie. Il numero variabile di argomenti può essere eseguito nello stesso modo? – grigoryvp