问题描述
我将如何在特定分钟数后安排任务? 例子:
schedule(32).do(job) # number of minutes,and random function to execute
我研究了 time.sleep 和 scheduler,但我听说 time.sleep 不是处理这些类型情况的最佳方法,调度程序会重复工作
解决方法
这是一种在 n
分钟后获得时间的方法
例如:
import schedule
import datetime
def job():
print('Hello')
print(datetime.datetime.now().strftime("%H:%M"))
def get_mins(m):
return (datetime.datetime.now() + datetime.timedelta(minutes=m)).strftime("%H:%M")
t = get_mins(1) # Get time after n mins.
print(t)
schedule.every().day.at(t).do(job)
while True:
schedule.run_pending()
,
使用 Python 附带的库并使用几秒钟来加快演示速度。
schedule
需要一个时间和一个函数,然后启动一个线程,在这段时间内休眠,然后调用该函数:
import threading
import time
from datetime import datetime
def _schedule_worker(seconds,function):
time.sleep(seconds)
function()
def schedule(seconds,function):
threading.Thread(target=_schedule_worker,args=(seconds,function)).start()
def work():
print(datetime.now())
print(datetime.now())
schedule(1,work)
schedule(5,work)
schedule(8,work)
schedule(10,work)
输出:
2021-04-04 23:30:08.916058
2021-04-04 23:30:09.926058
2021-04-04 23:30:13.933824
2021-04-04 23:30:16.923825
2021-04-04 23:30:18.923826
,
试试 simple_scheduler。它允许您生成任意数量的作业:
from time import sleep
from simple_scheduler.recurring import recurring_scheduler
def wait(t):
sleep(t)
print(f"I waited {t} seconds!")
recurring_scheduler.add_job(target=wait,kwargs={"t":10},period_in_seconds=5)
recurring_scheduler.run()
上述包也适用(如上例所示)当重复时间 period 小于任务的执行时间。