如何在Python中每小时重新运行一个程序(同时执行多个任务)?

2024-06-16 11:27:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个主要的功能,所有的任务都在这里。我要连续运行的第一个任务。我想在特定日期执行的第二个任务(例如:每周一上午12点)。最后一个任务必须使用其他参数重新运行main函数(我希望每小时运行一次此任务)。 我在ubuntu18上使用Python

我试着使用模块“schedule”,并在stack overflow,google。。。但我没有发现任何有用的东西

import schedule, time

def main(par1, par2, par3):
    def task1():
        # Do something
        print("Executing task1")

    def task2():
        # Do something different
        print("Executing task2")

    def rerunTask():
        print("Reruning main task")
        main(1,2,3) # Rerun main function with other parameters

    schedule.every().monday.at("12:00").do(task2)
    schedule.every(0.5).seconds.do(task1)
    schedule.every().hour.do(rerunTask)

main(2,3,1)

当我尝试这个代码时,一切都很好,直到“重新运行任务”。在他执行这个任务之后,他会在剩下的时间里继续重新运行这个函数

有人能帮我吗


Tags: 函数功能参数maindefdosomethingschedule
1条回答
网友
1楼 · 发布于 2024-06-16 11:27:07

可以将时间库与线程库结合使用,并基于epochs值执行函数

警告:由于使用线程,您可能必须终止终端才能退出

import time, threading

def main(par1, par2, par3):
    def task1():
        # Do something
        print("Executing task1")

    def task2():
        # Do something different
        print("Executing task2")

    def run_task1():
         while(1):
            task1()
            time.sleep(0.5)
    def run_task2():
        while(1):
            task2()
            time.sleep(3600)
    def run_task3():
        week_diff = 604800
        curr_time = time.time()
        first_monday_epoch = 345600
        total_monday_crossed = int((curr_time - first_monday_epoch) / week_diff)
        next_monday = (total_monday_crossed + 1) * week_diff + first_monday_epoch
        time.sleep(next_monday - time.time())
        while(1):
            task2()
            time.sleep(604800) #week time difference

    t1 = threading.Thread(target=run_task1, args=())
    t2 = threading.Thread(target=run_task2, args=())
    t3 = threading.Thread(target=run_task3, args=())
    t1.start()
    t2.start()
    t3.start()
    t1.join()
    t2.join()
    t3.join()

main(2,3,1)

注意:我使用Epoch converter计算第一个星期一00:00 AM的epoch和其他epoch信息

相关问题 更多 >