zoukankan      html  css  js  c++  java
  • python中schedule模块的使用

    python中schedule模块的使用

    由于需要用到一个使用python进行job管理的模块,找到了schedule模块,简单好用,在这里记录一下。
    详细源码可以参考这里

    安装方法

        pip install schedule

    使用方法

    import schedule
    import time

    def job():
        print("I'm working...")

    schedule.every(10).minutes.do(job)
    schedule.every().hour.do(job)
    schedule.every().day.at("10:30").do(job)
    schedule.every().monday.do(job)
    schedule.every().wednesday.at("13:15").do(job)

    while True:
        schedule.run_pending()
        time.sleep(1)

    运行该程序之后,可以定时的进行执行。除了代码中提到的方法之外,还有例如seconds等的一些方法,可以参考源码。
    TIPS

    注意,schedule方法是串行的,也就是说,如果各个任务之间时间不冲突,那是没问题的;如果时间有冲突的话,会串行的执行命令,例如以下代码

    import schedule
    import time
    import threading

    def job():
        print("I'm working... in job1  start")
        time.sleep(15)
        print("I'm working... in job1  end")

    def job2():
        print("I'm working... in job2")

    schedule.every(10).seconds.do(job)
    schedule.every(10).seconds.do(job2)

    while True:
        schedule.run_pending()
        time.sleep(1)

    输出如下:

        I’m working… in job1 start
        I’m working… in job1 end
        I’m working… in job2

    可以改成多线程的方式:

    import schedule
    import time
    import threading

    def job():
        print("I'm working... in job1  start")
        time.sleep(15)
        print("I'm working... in job1  end")

    def job2():
        print("I'm working... in job2")

    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,job2)


    while True:
        schedule.run_pending()
        time.sleep(1)

    有如下输出:

        I’m working… in job1 start
        I’m working… in job2
        I’m working… in job1 start
        I’m working… in job2
        I’m working… in job1 end

    可见在并行的执行。
    如果想要对线程的数量有所控制,“If you want tighter control on the number of threads use a shared jobqueue and one or more worker threads”,则可以采用如下方法:

    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 = 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)

  • 相关阅读:
    log4net编译后命名空间找不到的问题
    网络流建模汇总
    零散知识点收集
    CentOS7中“ONBOOT”已设置为“yes”但开机后ens33不会自启动解决方案
    Hanoi塔问题
    Mosquitto用户名密码配置
    Activiti5 数据库表结构
    皮尔森相关系数(Pearson correlation coefficient)
    如何用研发流程搞垮一个团队?
    Java 编程规范
  • 原文地址:https://www.cnblogs.com/interdrp/p/15569369.html
Copyright © 2011-2022 走看看