我可以用时钟时间设置线程计时器以与python中的cron作业同步吗

我可以用时钟时间设置线程计时器以与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

我有一个cron作业,在12:30,12:30,1,1:30运行。所以每半小时一次。每当cron作业运行时,我希望在python代码中运行一个线程


我看到过一些例子,比如每隔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