我可以用时钟时间设置线程计时器以与python中的cron作业同步吗
我有一个cron作业,在12:30,12:30,1,1:30运行。所以每半小时一次。每当cron作业运行时,我希望在python代码中运行一个线程我可以用时钟时间设置线程计时器以与python中的cron作业同步吗,python,multithreading,Python,Multithreading,我有一个cron作业,在12:30,12:30,1,1:30运行。所以每半小时一次。每当cron作业运行时,我希望在python代码中运行一个线程 我看到过一些例子,比如每隔x秒/min运行一次计时器。但是如果我在下午1:15启动python代码,例如,如果我每30分钟设置一次计时器,那么下次它将在下午1:45运行。不过我想在下午1:30跑步。这可能吗?几乎一切都可能,真正的问题是你为什么要这样做?请记住,cron调度器不一定会在精确的时间执行作业,而且,在Python中检查时间也不一定与cro
我看到过一些例子,比如每隔x秒/min运行一次计时器。但是如果我在下午1:15启动python代码,例如,如果我每30分钟设置一次计时器,那么下次它将在下午1:45运行。不过我想在下午1:30跑步。这可能吗?几乎一切都可能,真正的问题是你为什么要这样做?请记住,cron调度器不一定会在精确的时间执行作业,而且,在Python中检查时间也不一定与cron的时间相对应,因此,如果在执行cron作业后需要在Python代码中执行某些内容,您不能依赖于Python中的计时——您实际上需要从cron作业到Python脚本进行“通信”(最简单的方法是使用数据报套接字) 但是,如果要在Python中模拟cron scheduler,一种方法是使用
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
然后,您可以使用它在任何整小时+分钟的时间间隔内运行您想要的任何任务。例如:
counter = 0
def your_task():
global counter
counter += 1
if counter > 2:
return False
return True
schedule_hourly_task(your_task, 15)
它将每15分钟执行一次your_task()
函数,直到your_task()
返回False
——在本例中,在退出之前,返回时间为hh:15
,hh:30
和hh:45
。在您的情况下,调用schedule\u hourly\u task(您的\u task,30)
将每隔整整30分钟调用your\u task()
函数,只要your\u task()
返回True