如何解决使用 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)
解决方法
在一个线程中运行你的大作业1,否则它会阻塞你的主线程并且调度无法工作(并启动第二个任务)。
在工作 1 中工作,直到您到达结束时间
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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。