我目前有一个示例代码定义为:
import schedule
import time
def job(t):
print ("I'm working...", t)
return
schedule.every().day.at("01:00").do(job,'It is 01:00')
while True:
schedule.run_pending()
time.sleep(60) # wait one minute
但是,我希望在工作日的上午 9 点至下午 4 点每小时运行一次代码。 即周一到周五的每一天,我想在上午 9 点、上午 10 点、...、下午 3 点、下午 4 点运行代码。
阅读文档以了解schedule
似乎我可以在两个指定时间之间单独运行代码Monday
Friday
但不仅仅是工作日。
另外,以下time.sleep(60)
不应该使代码永久运行吗?
它对我有用的唯一方法是:
import schedule
import datetime
import time
nowtime = str(datetime.datetime.now())
def job(t):
print("I'm working...", str(datetime.datetime.now()), t)
for i in ["06:00", "09:00", "12:00", "15:00", "18:00"]:
schedule.every().monday.at(i).do(job, i)
schedule.every().tuesday.at(i).do(job, i)
schedule.every().wednesday.at(i).do(job, i)
schedule.every().thursday.at(i).do(job, i)
schedule.every().friday.at(i).do(job, i)
while True:
schedule.run_pending()
time.sleep(30)
def weekday_job(x, t=None):
week = datetime.today().weekday()
if t is not None and week < 5:
schedule.every().day.at(t).do(x)
weekday_job(main, '01:00')
weekday_job(main, '02:00')
while True:
schedule.run_pending()
time.sleep(60)
您可以使用库 APScheduler。例如:
from apscheduler.schedulers.blocking import BlockingScheduler
def job_function():
print("Hello World")
sched = BlockingScheduler()
# Runs from Monday to Friday at 5:30 (am) until
sched.add_job(job_function, 'cron', day_of_week='mon-fri', hour=5, minute=30)
sched.start()
时间表一开始看起来很有趣,但最终如果您需要更多内容,则没有真正的帮助。
尝试使用碧羹
import pycron
import time
def job():
timenow = time.localtime()
print("I'm working...", str( time.strftime("%H:%M", timenow) ))
while True:
# |----------------- on minute 0, so every full hour
# | |--------------- on hours 9 till 16
# | | | |-------- every day in month and every month
# V V V V v------ on weekdays Monday till Friday
if pycron.is_now('0 9-16 * * mon-fri'):
job()
time.sleep(60)
更好的方法:
schedule.every().monday.at("09:00").do(
lambda: schedule.every().hour.until("16:00").do(job))
您可以为每个工作日制作 5 个,也可以以更通用的方式进行:
days = ["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"]
# Make a generic "weekday" option for schedule
def weekday(self, day):
self.start_day = day
return self.weeks
schedule.Job.weekday = weekday
# For each non-weekend day
for i in range(5):
schedule.every().weekday(days[i]).at("09:00").do(
lambda: schedule.every().hour.until("16:00").do(job))
如果您愿意,也可以这样做:
for i in range(5):
# When the workday starts, schedule a job to run every hour and tag it
schedule.every().weekday(days[i]).at("09:00").do(
lambda: schedule.every().hour.do(job).tag(days[i]))
# When the workday ends, cancel the job using the tag
schedule.every().weekday(days[(i+1) % len(days)]).at("16:00").do(
lambda: schedule.clear(days[i]))
使用风险自负,我没有测试一人。