¿Hay alguna sintaxis incorporada en python que me permita publicar un mensaje a un subproceso específico de python dentro de mi problema? Como 'señal conectada en cola' en pyQt o :: PostMessage() en Windows. Necesito esto para la comunicación asíncrona entre las partes del programa: hay una serie de subprocesos que manejan eventos de red y necesitan publicar estos eventos en un solo subproceso 'lógico' que traduce los eventos de forma segura de un solo subproceso.¿Hay algún evento cross-thread integrado en python?
Respuesta
El módulo Queue es adecuado para lo que está describiendo.
Puede tener una configuración de cola compartida entre todos sus hilos. Los hilos que manejan los eventos de red pueden usar queue.put para publicar eventos en la cola. El hilo lógico usaría queue.get para recuperar eventos de la cola.
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)
No estoy seguro de lo que está buscando. Pero ciertamente no hay una sintaxis incorporada para eso. Eche un vistazo a los módulos queue y threading. Hay muchas cosas útiles como colas, condiciones, eventos, bloqueos y semáforos que se pueden utilizar para implementar todo tipo de comunicaciones síncronas y asíncronas.
estoy buscando una manera fácil de llamar a una función en un hilo y se llamará a la función vinculada en otro hilo (delegado en cola). Las primitivas de sincronización forzarán a hacerlo todo 'a mano', eso es mucho código. – grigoryvp
@Eye of Hell: Lea la documentación del módulo de cola. Lo que parece ser "invocar una función" entre hilos suele ser una cola de solicitudes pasadas de un hilo a otro; el hilo de recepción dequeues la solicitud y llama a la función. –
ah, recuerdo, ¿la función es un objeto de primera clase en python? (delegados incorporados). ¿Hay alguna sintaxis conocida para poner una 'llamada de función' en la cola y hacer una llamada real en dequeue en el hilo real? ¿Y qué hay de los argumentos de las funciones de clasificación? – grigoryvp
- 1. ¿Hay algún evento onDocumentChange?
- 2. ¿Hay algún evento "en el cambio DOM"?
- 3. Python: ¿Hay un paquete integrado para analizar html en dom
- 4. Operación Crossthread no válida ... - VB.NET
- 5. ¿Hay algún servidor Python OpenID disponible?
- 6. Python - ¿hay algún digitalizador gráfico disponible?
- 7. ¿Hay algún motor de alimentación de noticias (evento/actividad)?
- 8. Después de ejecutar $ (document) .ready(), ¿hay algún evento para eso?
- 9. ¿Hay algún evento como hashchange para cadenas de consulta?
- 10. ¿Hay algún evento para detectar cuándo se atenúa la pantalla?
- 11. Python IDE integrado en Visual Studio 2008?
- 12. ¿Hay algún método similar para dict en python?
- 13. ¿Hay algún ejemplo en python-purple flotando alrededor?
- 14. ¿Hay algún ejercicio de pitón en línea?
- 15. Acceso explícito al alcance integrado de Python
- 16. ¿Hay algún 'truco' con este patrón de Python?
- 17. ¿Hay algún catálogo de patrones de metaprogramación para Python?
- 18. ¿Hay algún buen producto GUI de terceros para Python?
- 19. ¿Hay algún intérprete de Ruby o Python para Lego Mindstorm?
- 20. ¿Hay algún árbol de raíz/patricia/critbit para Python?
- 21. ¿Hay algún contenedor de Python alrededor de cron?
- 22. ¿Hay algún Treebank gratis?
- 23. ¿Hay algún resaltador de sintaxis Python para Visual Studio 2010?
- 24. ¿Hay algún IDE compatible con la sintaxis de Python 3?
- 25. ¿Hay algún inconveniente en agregar un delegado vacío anónimo en la declaración de evento?
- 26. ¿Hay algún evento que desactive los cambios en scrollHeight o scrollWidth en jQuery?
- 27. Portando Python a un sistema integrado
- 28. ¿Hay algún embellecedor CoffeeScript?
- 29. ¿Hay algún buen buscador de objetos R?
- 30. EventHandler, evento, programación basada en delegados en Python, ¿apreciaría algún ejemplo?
¡Gracias! ¿Hay alguna manera de poner una llamada de función dentro de un evento? Las funciones de llamada de código de subprocesos reales, como PostConnectionStatus (ESTADO), y el subproceso de trabajo tienen controladores como OnConnectionStatus (i_status). ¿Hay alguna forma de controlar las llamadas de función automáticamente con un evento? – grigoryvp
En Python, las funciones son objetos como todo lo demás, por lo que se pueden pasar como otros objetos. De modo que también podría adjuntar una función para llamar con el evento, como q.put ((e, PostConnectionStatus)). Su hilo lógico podría hacer "e, func = q.get()". ¿Esto ayuda? –
algo seguro, gracias. El número variable de argumentos puede organizarse de la misma manera? – grigoryvp