加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python:定时任务模块schedule

发布时间:2020-12-17 00:01:38 所属栏目:Python 来源:网络整理
导读:1.安装 pip install schedule 2.官网使用demo span style="color: #0000ff;"def span style="color: #000000;" job(): span style="color: #0000ff;"print (span style="color: #800000;"" span style="color: #800000;"I'm working... span style="color: #

1.安装

pip install schedule

2.官网使用demo

<span style="color: #0000ff;">def<span style="color: #000000;"> job():
<span style="color: #0000ff;">print
(<span style="color: #800000;">"<span style="color: #800000;">I'm working...<span style="color: #800000;">"<span style="color: #000000;">)

schedule.every(10<span style="color: #000000;">).minutes.do(job)
schedule.every().hour.do(job)
schedule.every().day.at(<span style="color: #800000;">"<span style="color: #800000;">10:30<span style="color: #800000;">"<span style="color: #000000;">).do(job)
schedule.every(5).to(10<span style="color: #000000;">).minutes.do(job)
schedule.every().monday.do(job)
schedule.every().wednesday.at(<span style="color: #800000;">"<span style="color: #800000;">13:15<span style="color: #800000;">"<span style="color: #000000;">).do(job)
schedule.every().minute.at(<span style="color: #800000;">"<span style="color: #800000;">:17<span style="color: #800000;">"<span style="color: #000000;">).do(job)

<span style="color: #0000ff;">while<span style="color: #000000;"> True:
schedule.run_pending()
time.sleep(1)

3.拓展:

  1.并行执行任务

  (1)默认情况下,schedule按顺序执行所有作业。这背后的原因是很难找到一个让每个人都开心的并行执行模型

<span style="color: #0000ff;">def<span style="color: #000000;"> job():
<span style="color: #0000ff;">print
(<span style="color: #800000;">"
<span style="color: #800000;">I'm running on thread %s
<span style="color: #800000;">" %<span style="color: #000000;"> threading.current_thread())

<span style="color: #0000ff;">def<span style="color: #000000;"> run_threaded(job_func):
job_thread = threading.Thread(target=<span style="color: #000000;">job_func)
job_thread.start()

schedule.every(10<span style="color: #000000;">).seconds.do(run_threaded,job)
schedule.every(10<span style="color: #000000;">).seconds.do(run_threaded,job)

<span style="color: #0000ff;">while 1<span style="color: #000000;">:
schedule.run_pending()
time.sleep(1)

  (2)如果需要控制线程数,就需要用queue

<span style="color: #0000ff;">def<span style="color: #000000;"> job():
<span style="color: #0000ff;">print
(<span style="color: #800000;">"
<span style="color: #800000;">I'm working
<span style="color: #800000;">"
<span style="color: #000000;">)

<span style="color: #0000ff;">def<span style="color: #000000;"> worker_main():
<span style="color: #0000ff;">while 1<span style="color: #000000;">:
job_func =<span style="color: #000000;"> jobqueue.get()
job_func()
jobqueue.task_done()

jobqueue =<span style="color: #000000;"> Queue.Queue()

schedule.every(10<span style="color: #000000;">).seconds.do(jobqueue.put,job)
schedule.every(10<span style="color: #000000;">).seconds.do(jobqueue.put,job)

worker_thread = threading.Thread(target=<span style="color: #000000;">worker_main)
worker_thread.start()

<span style="color: #0000ff;">while 1<span style="color: #000000;">:
schedule.run_pending()
time.sleep(1)

  (3)抛出异常

<span style="color: #0000ff;">def catch_exceptions(cancel_on_failure=<span style="color: #000000;">False):
<span style="color: #0000ff;">def<span style="color: #000000;"> catch_exceptions_decorator(job_func):
@functools.wraps(job_func)
<span style="color: #0000ff;">def wrapper(*args,*<span style="color: #000000;">kwargs):
<span style="color: #0000ff;">try<span style="color: #000000;">:
<span style="color: #0000ff;">return job_func(
args,**<span style="color: #000000;">kwargs)
<span style="color: #0000ff;">except<span style="color: #000000;">:
<span style="color: #0000ff;">import<span style="color: #000000;"> traceback
<span style="color: #0000ff;">print<span style="color: #000000;">(traceback.format_exc())
<span style="color: #0000ff;">if<span style="color: #000000;"> cancel_on_failure:
<span style="color: #0000ff;">return<span style="color: #000000;"> schedule.CancelJob
<span style="color: #0000ff;">return<span style="color: #000000;"> wrapper
<span style="color: #0000ff;">return<span style="color: #000000;"> catch_exceptions_decorator

@catch_exceptions(cancel_on_failure=<span style="color: #000000;">True)
<span style="color: #0000ff;">def<span style="color: #000000;"> bad_task():
<span style="color: #0000ff;">return 1 /<span style="color: #000000;"> 0

schedule.every(5).minutes.do(bad_task)

  (4)只运行一次

schedule.every().day.at(<span style="color: #800000;">'<span style="color: #800000;">22:30<span style="color: #800000;">').do(job_that_executes_once)

  (5)一次取消多个任务

(schedule.every().day.do(greet,<span style="color: #800000;">'<span style="color: #800000;">Andrea<span style="color: #800000;">').tag(<span style="color: #800000;">'<span style="color: #800000;">daily-tasks<span style="color: #800000;">',<span style="color: #800000;">'<span style="color: #800000;">friend<span style="color: #800000;">'<span style="color: #000000;">)
schedule.every().hour.do(greet,<span style="color: #800000;">'<span style="color: #800000;">John<span style="color: #800000;">').tag(<span style="color: #800000;">'<span style="color: #800000;">hourly-tasks<span style="color: #800000;">',<span style="color: #800000;">'<span style="color: #800000;">Monica<span style="color: #800000;">').tag(<span style="color: #800000;">'<span style="color: #800000;">hourly-tasks<span style="color: #800000;">',<span style="color: #800000;">'<span style="color: #800000;">customer<span style="color: #800000;">'<span style="color: #000000;">)
schedule.every().day.do(greet,<span style="color: #800000;">'<span style="color: #800000;">Derek<span style="color: #800000;">').tag(<span style="color: #800000;">'<span style="color: #800000;">daily-tasks<span style="color: #800000;">',<span style="color: #800000;">'<span style="color: #800000;">guest<span style="color: #800000;">'<span style="color: #000000;">)

schedule.clear(<span style="color: #800000;">'<span style="color: #800000;">daily-tasks<span style="color: #800000;">')

  (6)在任务中加入日志功能

<span style="color: #0000ff;">import<span style="color: #000000;"> schedule

<span style="color: #008000;">#<span style="color: #008000;"> This decorator can be applied to
<span style="color: #0000ff;">def<span style="color: #000000;"> with_logging(func):
@functools.wraps(func)
<span style="color: #0000ff;">def wrapper(*args,*<span style="color: #000000;">kwargs):
<span style="color: #0000ff;">print(<span style="color: #800000;">'<span style="color: #800000;">LOG: Running job "%s"<span style="color: #800000;">' % func.<span style="color: #800080;">name<span style="color: #000000;">)
result = func(
args,**<span style="color: #000000;">kwargs)
<span style="color: #0000ff;">print(<span style="color: #800000;">'<span style="color: #800000;">LOG: Job "%s" completed<span style="color: #800000;">' % func.<span style="color: #800080;">name<span style="color: #000000;">)
<span style="color: #0000ff;">return<span style="color: #000000;"> result
<span style="color: #0000ff;">return<span style="color: #000000;"> wrapper

@with_logging
<span style="color: #0000ff;">def<span style="color: #000000;"> job():
<span style="color: #0000ff;">print(<span style="color: #800000;">'<span style="color: #800000;">Hello,World.<span style="color: #800000;">'<span style="color: #000000;">)

schedule.every(3<span style="color: #000000;">).seconds.do(job)

<span style="color: #0000ff;">while 1<span style="color: #000000;">:
schedule.run_pending()
time.sleep(1)

  (7)随机开展工作

(schedule.every(5).to(10).seconds.do(my_job)

  (8)传参给作业函数

(schedule.every(2).seconds.do(greet,name=<span style="color: #800000;">'<span style="color: #800000;">Alice<span style="color: #800000;">'<span style="color: #000000;">)
schedule.every(
4).seconds.do(greet,name=<span style="color: #800000;">'
<span style="color: #800000;">Bob
<span style="color: #800000;">')

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读