Prefacio
Asegúrese de que realmente necesita ejecutar su tarea repetidamente. Esto se llama espera ocupada y casi siempre subóptima. Si su tarea está verificando la salida de un subproceso, puede simplemente subprocess.wait()
terminarla, por ejemplo. Si su tarea es esperar a que se toque un archivo o directorio en el sistema de archivos, puede usar pyinotify para activar su código desde el evento del sistema de archivos manejado por el núcleo.
Responder
Así es como se escribe un bucle infinito para la espera ocupada sin consumir demasiada CPU.
Python 2:
from __future__ import print_function
from __future__ import division
import time
while True:
range(10000) # some payload code
print("Me again") # some console logging
time.sleep(0.2) # sane sleep time of 0.1 seconds
Python 3:
import time
while True:
range(10000) # some payload code
print("Me again") # some console logging
time.sleep(0.2) # sane sleep time of 0.1 seconds
Evaluación
Como @gnibbler probó en otra respuesta , el código presentado no debe consumir más del 1% de CPU en máquinas recientes. Si todavía consume demasiada CPU con su código de carga útil, considere aumentar el tiempo para dormir aún más. Por otro lado, es posible que el código de carga útil deba optimizarse para la ejecución repetida. Por ejemplo, el almacenamiento en caché podría acelerar la ejecución de datos sin cambios.
Créditos
Esta respuesta intenta basarse en la respuesta de @ user2301728 .