Я рекомендую порождать другой поток , делая его потоком демона , затем sleep , пока вы не захотите, чтобы задача умерла. Например:
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's still going.
Интерпретатор Python завершит работу после выхода из всех потоков, не являющихся демонами. Таким образом, когда ваш основной поток завершает работу, и если единственный другой поток, выполняемый вами, это ваша задача, выполняемая в отдельном потоке демона, то Python просто завершится. Это удобный способ запуска чего-либо в фоновом режиме, если вы хотите иметь возможность просто завершить работу, не беспокоясь о том, чтобы вручную заставить его завершить работу и дождавшись его остановки.
Другими словами, преимущество, которое этот подход имеет по сравнению с использованием sleep
в цикле for, заключается в том, что вы должны кодировать свою задачу таким образом, чтобы она разбивалась на отдельные порции, а затем проверять каждую частоту истекло ли ваше время. Это может подходить для ваших целей, но может иметь проблемы, например, если каждый блок занимает значительное время, что заставляет вашу программу работать значительно дольше, чем введено пользователем, и т. Д. Является ли это проблемой для вас зависит от задачи, которую вы пишете, но я подумал, что упомяну этот подход на тот случай, если он будет для вас лучше.