简介
轻量级的python任务定时运行库--官方文档
使用示例
import schedule
import time
def job():
print("I'm working...")
def job1(name): #带参数
print(name)
schedule.every(10).minutes.do(job) #每10分钟执行一次
schedule.every().hour.do(job) #每小时执行一次
schedule.every().day.at("10:30").do(job) #每天10:30执行一次
schedule.every().monday.do(job) #每周星期一执行一次
schedule.every().wednesday.at("13:15").do(job) #每周星期三执行一次
schedule.every().wednesday.at("13:15").do(job1,'waiwen') #传入参数
while True:
schedule.run_pending()
time.sleep(1)
复制代码
相关问题:
1.如何并行执行工作?
假如每10分钟运行50个任务,每个任务耗时1分钟,这样在下一个10分钟到来时,上一轮的任务仍在运行,然后又开始了新一轮的任务。解决这个问题的方法是,为每个任务创建一个线程,让任务在线程中运行,从而并行工作。
import threading
import time
import schedule
def job():
print("I'm running on thread %s" % threading.current_thread())
def run_threaded(job_func):
job_thread = threading.Thread(target=job_func)
job_thread.start()
schedule.every(10).seconds.do(run_threaded, job)
schedule.every(10).seconds.do(run_threaded, job)
while 1:
schedule.run_pending()
time.sleep(1)
复制代码
2.使用队列?
使用queue队列共享,使用多个 worker_thread。
import Queue
import time
import threading
import schedule
def job():
print("I'm working")
def worker_main():
while 1:
job_func = jobqueue.get()
job_func()
jobqueue.task_done()
jobqueue = Queue.Queue()
schedule.every(10).seconds.do(jobqueue.put, job)
schedule.every(10).seconds.do(jobqueue.put, job)
schedule.every(10).seconds.do(jobqueue.put, job)
schedule.every(10).seconds.do(jobqueue.put, job)
schedule.every(10).seconds.do(jobqueue.put, job)
worker_thread = threading.Thread(target=worker_main)
worker_thread.start()
while 1:
schedule.run_pending()
time.sleep(1)
复制代码
3.只运行一次任务?
def job_that_executes_once():
# Do some work ...
return schedule.CancelJob
schedule.every().day.at('22:30').do(job_that_executes_once)
复制代码
4.取消任务?
def greet(name):
print('Hello {}'.format(name))
schedule.every().day.do(greet, 'Andrea').tag('daily-tasks', 'friend')
schedule.every().hour.do(greet, 'John').tag('hourly-tasks', 'friend')
schedule.every().hour.do(greet, 'Monica').tag('hourly-tasks', 'customer')
schedule.every().day.do(greet, 'Derek').tag('daily-tasks', 'guest')
schedule.clear('daily-tasks')
复制代码
5.随机间隔内运行任务?
def my_job():
# This job will execute every 5 to 10 seconds.
print('Foo')
schedule.every(5).to(10).seconds.do(my_job)
复制代码
6.如何抛出异常?
模块不会主动抛出异常,但是可以使用装饰器捕获目标任务的异常。
import functools
def catch_exceptions(job_func, cancel_on_failure=False):
@functools.wraps(job_func)
def wrapper(*args, **kwargs):
try:
return job_func(*args, **kwargs)
except:
import traceback
print(traceback.format_exc())
if cancel_on_failure:
return schedule.CancelJob
return wrapper
@catch_exceptions(cancel_on_failure=True)
def bad_task():
return 1 / 0
schedule.every(5).minutes.do(bad_task)
复制代码
更详细用法请访问 官方文档
本文介绍了一款轻量级的Python定时任务运行库,提供了丰富的调度选项,如每10分钟、每小时、每天特定时间等。文章还探讨了如何通过线程和队列实现任务的并行执行,以及如何处理一次性任务、任务取消、随机间隔任务和异常处理。
1312

被折叠的 条评论
为什么被折叠?



