使用python调度作业



我想安排两个在不同时间开始的作业。第一个作业需要很长时间,所以我必须在某个小时取消它,以便暂停脚本的执行一段时间,然后运行第二个计划的作业,但我没有取消第一个作业,它一直在运行,第二个作业永远不会执行。

我一直在尝试这个:

from datetime import datetime
import datetime as dt
import schedule
def job1():
liat = get_LI_AT()
for doc in db.collection_linkedin.find():
try:
if main_scrap.calculate_time(doc['Link']) >= 1:
rslt = main_scrap.update_company(doc['Link'], liat)
print(rslt)
time.sleep(1)
except:
print("check ", doc['Link'])
pass

def job2():
liat = get_LI_AT()
main_scrap.companies_scraping(liat)
scheduler1 = schedule.Scheduler()
j = scheduler1.every().day.at('7:30').do(job1)
scheduler2 = schedule.Scheduler()
scheduler2.every().day.at('14:30').do(job2)
while True:
while datetime.now().time() > dt.time(7) and datetime.now().time() < dt.time(12):
scheduler1.run_pending()
time.sleep(1)
scheduler1.cancel_job(j)
while datetime.now().time() > dt.time(14) and datetime.now().time() < dt.time(18):
scheduler2.run_pending()
time.sleep(1)
scheduler2.clear()
time.sleep(5)

还有这个:

schedule.every().day.at('7:30').do(job1)  
schedule.every().day.at('14:30').do(job2)
while True:
if datetime.now().time() > dt.time(7) and datetime.now().time() < dt.time(12):
schedule.run_pending()
time.sleep(1)
elif datetime.now().time() > dt.time(14) and datetime.now().time() < dt.time(18):
schedule.run_pending()
time.sleep(1)

time.sleep(5)

我还使用过:

schedule.every().day.until("12:00").do(job)
schedule.every().day.until("18:00").do(job)
while True:
if datetime.now().time() > dt.time(7) and datetime.now().time() < dt.time(12):
schedule.run_pending()
time.sleep(1)
elif datetime.now().time() > dt.time(14) and datetime.now().time() < dt.time(18):
schedule.run_pending()
time.sleep(1)

time.sleep(5)

在一个线程中运行您的大型job1,否则它将阻塞您的主线程,调度无法工作(并启动第二个任务(
在job1中工作,直到达到您的结束时间

import threading
import time
from datetime import datetime as dt, time as t
import schedule

def job1():
end_time = t(18)
while dt.now().time() < end_time:
print("Job 1 working...")
time.sleep(1)
print("Time for job 1 is over")

def job2():
print("Job 2 working...")

def job1_executor():
threading.Thread(target=job1).start()

schedule.every().day.at('07:30').do(job1_executor)
schedule.every().day.at('14:30').do(job2)
while True:
schedule.run_pending()
time.sleep(1)

最新更新