Если вы знаете, когда следующий запуск будет, вы можете просто использовать time.sleep
:
import time
interval = 5
next_run = 0
while True:
time.sleep(max(0, next_run - time.time()))
next_run = time.time() + interval
action_print()
Если вы хотите, чтобы другие темы, чтобы иметь возможность прервать вас, использовать event подобные :
import time,threading
interval = 5
next_run = 0
interruptEvent = threading.Event()
while True:
interruptEvent.wait(max(0, next_run - time.time()))
interruptEvent.clear()
next_run = time.time() + interval
action_print()
Другой поток теперь можно назвать interruptEvent.set()
разбудить ваши.
Во многих случаях вы также захотите использовать Lock, чтобы избежать race conditions по совместно используемым данным. Обязательно очистите событие, пока вы держите замок.
Вы также должны знать, что под cpython только один поток может выполнять код Python. Поэтому, если ваша программа связана с процессором по нескольким потокам, и вы используете cpython или pypy, вы должны заменить threading
на multiprocessing
.
Если вы не хотите спать так или иначе, вы будете записывать CPU. – Mat
Не могли бы вы подробно остановиться на «будет больше действий для выполнения через различные промежутки времени»? –
Как я могу убедиться, что все будет выполнено вовремя во время процесса? Я попытался использовать сон, но все, что меньше секунды, съедает процессор. – m1k3y3