while terminar suma numeros for ejercicios ejemplos con como ciclo bucle python while-loop pyserial

python - terminar - suma de numeros con while en c



Python eficiente y rĂ¡pido mientras utiliza el bucle mientras duerme() (3)

Estoy intentando comunicarme con un dispositivo en serie utilizando Pyserial. Como los comandos deben enviarse continuamente, deben colocarse en un bucle while en Python.

Actualmente estoy usando este código y he echado un vistazo al proceso de Python que requiere un 100% de CPU :

while True: #do some serial sending here time.sleep(0.2)

Este código funciona. Sin embargo, la velocidad de envío es lenta. Intenté hacerlo más rápido disminuyendo el intervalo de sleep , pero parece cargar demasiado la CPU.

En resumen, ¿existe alguna forma de iterar de manera efectiva durante un ciclo de tiempo para siempre, mientras se mantiene un bajo consumo de recursos de CPU?


Debe calcular la compensación que está dispuesto a tener entre la velocidad y la carga de la CPU.

Si tiene que enviar breves ráfagas de datos, mientras no hace mucho entre los mensajes, tal vez pueda vivir con una alta carga de CPU por un corto tiempo ya que el promedio todavía puede ser bajo.


En lo que respecta a su comentario sobre la respuesta de Joachim:

Entonces su código de microcontrolador necesita un rediseño. De lo contrario, simplemente está convirtiendo su computadora de propósito general en nada más que un simple "microcontrolador" que itera repetidamente sobre el código innecesario, de ahí el 100% de la CPU. Otro síntoma de que usa su computadora incorrectamente es el hecho de que la velocidad del motor de su hardware depende de la velocidad a la que le envía los comandos a través de la interfaz serial. Debe "ordenarlo" con la computadora que alojará su lógica de alto nivel. Y su microcontrolador necesita manejar el control repetitivo de bajo nivel del motor.


La parte lenta de desperdicio de CPU es el "envío serial". El bucle while con solo un breve descanso utilizará una CPU despreciable.

¿Puedes mostrar el código de envío serial? Puede haber una manera de acelerar eso.

En esta CPU bastante lenta veo esto:

import time while True: time.sleep(0.2) # 0% CPU while True: time.sleep(0.02) # 0% CPU while True: time.sleep(0.002) # 0.5% CPU while True: time.sleep(0.0002) # 6% CPU while True: time.sleep(0.00002) # 18% CPU

Ahora haz un trabajo extra en el bucle:

import time while True: range(10000) and None; time.sleep(0.2) # 1% CPU while True: range(10000) and None; time.sleep(0.02) # 15% CPU while True: range(10000) and None; time.sleep(0.002) # 60% CPU while True: range(10000) and None; time.sleep(0.0002) # 86% CPU

Los ejecuté en el intérprete y detuve cada uno de los bucles con ctrl-C.