У меня есть программа (temptrack), где я должен загрузить данные о погоде каждый x минуты для x суммы часов. Я выяснил, как загрузить каждый x минуты с помощью time.sleep(x*60)
, но у меня нет подсказки, как повторить этот процесс для определенного количества часов.
ОБНОВЛЕНИЕ: Спасибо всем, кто отправил решение. Я отметил пример с помощью "datetime.datetime.now () + datetime.timedelta (hours=x)" как лучший ответ, потому что я мог понять это лучшее, и кажется, что он будет работать очень хорошо на мою цель.
Вычислите время, в течение которого вы хотите прекратить делать то, что вы делаете, и каждый раз проверяйте, не истек ли срок. Примерно так:
finish_time = datetime.datetime.now() + datetime.timedelta(hours=6)
while datetime.datetime.now() < finish_time:
do_something()
sleep_for_a_bit()
Возможно, я вас неправильно понимаю, но просто включите это в цикл, который выполняется достаточное количество раз. Например, чтобы загружать каждые 5 минут в течение 2 часов, вам нужно загружать 24 раза, поэтому:
for i in range(24):
download()
sleep(5*60)
Если вам нужно, чтобы его можно было параметризовать, просто:
from __future__ import division
from math import ceil
betweenDLs = 5 # minutes
totalTime = 2*60 # minutes
for i in range(int(ceil(totalTime/betweenDLs))):
download()
sleep(betweenDLs*60)
Может показаться излишним, но для выполнения фоновых задач, особенно если вам нужен графический интерфейс, я бы рекомендовал проверить маршрут PyQt с помощью QSystemTrayIcon и QTimer
Я только что нашел sched в стандартной библиотеке Python.