Передмова
Будьте впевнені, що вам справді потрібно повторно виконувати завдання. Це називається зайнятим очікуванням і майже завжди неоптимальним. Якщо ваше завдання перевіряє вихід підпроцесу, ви можете просто subprocess.wait()
виконати його, наприклад. Якщо ваше завдання - дочекатися торкання файлу або каталогу у файловій системі, ви можете використовувати pyinotify, щоб отримати ваш код, ініційований у події файлової системи, якою керує ядро.
Відповідь
Так ви пишете нескінченний цикл для зайнятого очікування, не витрачаючи занадто багато процесора.
Пітон 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
Пітон 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
Оцінка
Як перевірено @gnibbler в іншій відповіді , представлений код не повинен споживати більше 1% процесора на останніх машинах. Якщо він все ще споживає занадто багато процесора з вашим кодом корисного навантаження, подумайте про те, щоб ще більше посилити час на сон. З іншого боку, код корисної навантаження може потребувати оптимізації для повторного виконання. Наприклад, кешування може пришвидшити роботу над незмінними даними.
Кредити
Ця відповідь намагається опиратися на відповідь @ user2301728 .