Pregunta

Tengo un hilo que es de votación una pieza de hardware.

while not hardware_is_ready():
    pass
process_data_from_hardware()

Pero hay otros hilos y procesos (!) Que podrían tener cosas que hacer. Si es así, no quiero para quemar la CPU comprobar el hardware de todos los demás instrucciones. Ha sido un tiempo desde que he tratado con rosca, y cuando lo hice no fue Python, pero creo que la mayoría de las bibliotecas tienen una función de roscado yield o algo que permite que un hilo para decirle al programador "Dar los otros hilos oportunidad. "

while not hardware_is_ready():
    threading.yield()          # This function doesn't exist.
process_data_from_hardware()

Pero no puedo encontrar ninguna referencia a algo como esto en la documentación de roscado. Python tiene una declaración yield, pero estoy bastante seguro de que es algo completamente distinto (que ver con los generadores).

¿Qué es lo correcto a hacer aquí?

¿Fue útil?

Solución

time.sleep(0) es suficiente para producir de control - no hay necesidad de utilizar un epsilon positivo. De hecho, time.sleep(0) significa "rendimiento a cualquier otro hilo puede estar listo".

Otros consejos

Lea sobre el Intérprete de bloqueo global (GIL).

Por ejemplo: http: // jessenoller.com/2009/02/01/python-threads-and-the-global-interpreter-lock/

También: http://www.pyzine.com/Issue001/Section_Articles/article_ThreadingGlobalInterpreter. html

Haga esto en su código si usted debe hacer Ocupado en espera (por ejemplo, un dispositivo de votación).

time.sleep( 0.0001 )

Esto dará lugar a la programador de subprocesos.

Además, me recogió algunas notas y referencias en http: / /homepage.mac.com/s_lott/iblog/architecture/C551260341/E20081031204203/index.html

Si usted está haciendo esto en * nix, es posible encontrar el rel="nofollow seleccione biblioteca útil. Kamaela también tiene algunos componentes que pueden ser útiles, pero puede requerir un poco de un cambio de paradigma.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top