Ответ 1
Я рекомендую создать еще один thread, сделав его демона, затем спать, пока вы не захотите, чтобы задача умерла. Например:
from time import sleep
from threading import Thread
def some_task():
while True:
pass
t = Thread(target=some_task) # run the some_task function in another
# thread
t.daemon = True # Python will exit when the main thread
# exits, even if this thread is still
# running
t.start()
snooziness = int(raw_input('Enter the amount of seconds you want to run this: '))
sleep(snooziness)
# Since this is the end of the script, Python will now exit. If we
# still had any other non-daemon threads running, we wouldn't exit.
# However, since our task is a daemon thread, Python will exit even if
# it still going.
Интерпретатор Python отключится, когда все не-демонные потоки завершатся. Поэтому, когда ваш основной поток выйдет, если только другой поток работает, ваша задача состоит в том, что вы работаете в отдельном потоке демона, тогда Python просто выйдет. Это удобный способ запустить что-то в фоновом режиме, если вы хотите просто выйти, не беспокоясь о том, чтобы вручную заставить его выйти и ждать его остановки.
Иными словами, преимущество, которое этот подход использует при использовании sleep
в цикле for, заключается в том, что вам нужно запрограммировать свою задачу таким образом, чтобы она разбивалась на дискретные куски, а затем проверяла каждую так часто идет ли ваше время. Что может быть хорошо для ваших целей, но у него могут быть проблемы, например, если каждый кусок занимает значительное количество времени, что приводит к тому, что ваша программа будет работать значительно дольше, чем введенный пользователем, и т.д. Это проблема для вас зависит от задачи, которую вы пишете, но я подумал, что упомянул бы этот подход, если вам будет лучше.