Практически все возможно, настоящий вопрос - почему вы хотите это сделать? Имейте в виду, что планировщик cron не обязательно будет выполнять задания в точное время, и, кроме того, проверка времени в Python не обязательно будет соответствовать времени cron, поэтому, если вам нужно выполнить что-то в вашем Python-коде после, задание cron выполненный, вы не можете полагаться на измерение таймингов в Python - вам на самом деле нужно «обмениваться» с вашим заданием cron на ваш скрипт Python (проще всего использовать сокеты дейтаграмм)
Но, если вы хотите имитировать планировщик cron в Python , один из способов сделать это - использовать модуль datetime
, чтобы получить текущее время, а затем рассчитать сумму time.sleep()
, которая вам понадобится, прежде чем ваша команда снова заработает, например:
def schedule_hourly_task(task, minute=0):
# get hourly offset in seconds in range 1-3600
period = ((60 + minute) % 60) * 60 or 3600
while True:
# get current time
current = datetime.datetime.now()
# count number of seconds in the current hour
offset = (current - current.replace(minute=0, second=0, microsecond=0)).total_seconds()
# calculate number of seconds til next period
sleep = period - offset % period
if offset + sleep > 3600: # ensure sleep times apply to full hours only
sleep += 3600 % period
# sleep until the next period
time.sleep(sleep)
# run the task, break the loop and exit the scheduler if `False` is returned
if not task():
return
Затем вы можете использовать его для выполнения любой задачи, которую вы хотите, при любом смещении full_hour + minute
. Например:
counter = 0
def your_task():
global counter
counter += 1
if counter > 2:
return False
return True
schedule_hourly_task(your_task, 15)
И он будет выполнять функцию your_task()
каждые 15 минут, пока your_task()
возвращается False
- в этом случае на hh:15
, hh:30
и hh:45
перед выходом. В вашем случае по телефону schedule_hourly_task(your_task, 30)
вызовет функцию your_task()
каждые полные 30 минут до тех пор, пока your_task()
не вернет True
.