如何在 Python 中每小时重新运行一个程序(同时执行多个任务)?
How to rerun a program (while executing multiple tasks) every hour in Python?
我有一个主要功能,所有任务都位于其中。第一个任务我要运行连续。我的第二个任务我想在特定日期 运行(例如:每周一中午 12 点)。最后一个任务必须重新 运行 主函数,但带有其他参数(我想每小时 运行 这个任务)。
我在 Ubuntu 18.
上使用 Python
我尝试使用模块“schedule”并在此处搜索有关堆栈溢出的答案,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)
当我尝试此代码时一切正常,直到 "rerun task"。在他执行完这个任务后,他在剩下的时间里不断地重新运行s这个函数。
有人可以帮我吗?
您可以将时间库与线程库一起使用,并根据 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上午和其他纪元信息。
我有一个主要功能,所有任务都位于其中。第一个任务我要运行连续。我的第二个任务我想在特定日期 运行(例如:每周一中午 12 点)。最后一个任务必须重新 运行 主函数,但带有其他参数(我想每小时 运行 这个任务)。 我在 Ubuntu 18.
上使用 Python我尝试使用模块“schedule”并在此处搜索有关堆栈溢出的答案,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)
当我尝试此代码时一切正常,直到 "rerun task"。在他执行完这个任务后,他在剩下的时间里不断地重新运行s这个函数。
有人可以帮我吗?
您可以将时间库与线程库一起使用,并根据 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上午和其他纪元信息。