python中schedule模块的使用_伊小白的博客-程序员资料_python schedule

技术标签: python  所学整理  schdule  job管理  

python中schedule模块的使用

标签(空格分隔): python job管理 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)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/kamendula/article/details/51452352

智能推荐

windows下qt程序意外崩溃,生成dump文件的方法_修行进行时的博客-程序员资料

程序运行一段时间之后,意外退出,没有提示任何出错信息,这种情况可能是内存泄漏,但是没有提示错误信息,很难定位到具体代码。我们可以生成dump文件,定位出错位置。在工程中添加代码:mdump.h#ifndef MDUMP1_H#define MDUMP1_H#include <Windows.h>#include <DbgHelp.h>// base...

Java开源模板引擎_wx5701619的博客-程序员资料_java 模板引擎原理

Velocity Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。 当Velocity应用于web开发时,界面设计人员可以和java程序开发人员同步开发一个遵循MVC架构的web站点,也就是说,页面设计人员可以只关注页面的显示效果,而由java程序

Unix/Linux下几个最致命的命令_虎皮猫大人王的博客-程序员资料

本文主要参考了以下原文:http://www.linuxpromagazine.com/Online/News/Seven-Deadliest-Linux-Commandshttp://ubuntuforums.org/announcement.php?f=326大多数时候程序员性情温和,神情淡定。但是会有例外,当他们因为加班加点过度劳累,在意识脆弱、头脑短路、麻痹大意时执行了

R语言应用实战-聚类分析以及k-means的优缺点_普通网友的博客-程序员资料_r型聚类分析的优缺点

一.聚类概念聚类分析cluster Analysis)是研究物以类聚的现代统计方法。在过去是依靠经验和专业知识做定性分析处理,很少利用数学方法多元统计分析逐渐被引进数值分类,形成聚类分析的分支。以下是我为大家准备的几个精品专栏,喜欢的小伙伴可自行订阅,你的支持就是我不断更新的动力哟!MATLAB-30天带你从入门到精通MATLAB深入理解高级教程(附源码)tableau可视化数据分析高级教程思想:认为所研究的样本或指标(变量)之间存在着不同程度的相似性(亲疏关系)。于是根据一批样本的

Centos 8 | 网络_enobear的博客-程序员资料

网络配置说明新安装的 Centos 8 默认网卡是没有启动的。默认只能通过NetworkManager.service进行网络配置。没有传统的network.service,但依然支持。NMNM服务是管理和监控网络设置的守护进程,它是一个动态的,事件驱动的网络管理服务。命令# 重启NMsystemctl restart NetworkManager# 查看网络连接nmcli c# 查看网卡信息nmcli d# 查看ipnmcli# 重新加载网络nmcli c relo

create-react-app 创建页面打开没有显示_Ordinary_hermit的博客-程序员资料

react创建网页显示空白,可能会遇到的问题

随便推点

flutter 插件已经安装但是还报错_前端技术:一文带你掌握Flutter插件开发新姿势..._黄哒哒的博客-程序员资料

导语 |随着Flutter生态的快速发展,越来越多的Flutter插件涌现出来,那么如何开发一个Flutter插件呢?本文以具体的native_image_view插件为例,带你快速掌握Flutter插件的开发。文章作者:赵哲,腾讯游戏运营研发工程师一、概述随着开发技术的发展,几乎所有主流的开发语言都有自己的包管理工具。Node开发有npm、Android开发有Gradle,Flutter也有自己...

无法连接远程redis问题_LeBron永鑫的博客-程序员资料_redis最新版本无法远程连接

总结:1.允许redis外网访问开启这个配置时:redis 只接收来自于该 IP 地址列表的请求,如果不进行设置,那么将处理所有请求注释掉bind 127.0.0.1,允许redis外网访问2.关闭保护模式protected-mode改为no,默认为yes3.开放云服务器端口6379遇到的坑:千万不要使用宝塔面板开放端口!!!我使用宝塔面板开放了端口6379不起作用,打开阿里云控制台后才发现根本没有放行6379端口以后再开放端口一定要使用阿里云控制台!!!...

axios 重定向问题解决_Axios 源码解析(我总觉得我解析得最全了)_weixin_39731845的博客-程序员资料

准备工作主要根据他在 npm 上的核心功能点,进行提问吧。可以先抛出几个问题1、axios 的大致原理 or axios 的本质是什么2、axios 是怎么实现请求拦截的3、axios 是如何防止 xsrf 的4、实际使用中遇到过的点好,接下来围绕这些点对这个库简单分析一下,首先我们可以先写一个服务器,可以接收并打印前端请求的就可以const http = require('http');cons...

统一诊断服务(UDS)_晓翔仔的博客-程序员资料_uds 库

统一诊断服务(Unified Diagnostic Services),简称UDS。是ISO 15765和ISO 14229定义的一种汽车通用诊断协议

考研复试408问题(还在更新)_聚精会神搞学习的博客-程序员资料

面试问题之编程语言:c++的特点是什么?封装,继承,多态,支持面向对象和面向过程的开发c++的异常处理机制?抛出异常和捕捉异常进行处理。c++和c,java的区别?c是纯过程,c++是对象加过程,java是存面向对象纯虚函数?被virtual修饰的成员函数,再基类不能实现,而他的实现放到派生类中实现什么是内存泄漏?申请了一块内存空间,使用完毕后没有释放掉计算机网络:TCP/IP分层五层模型:物理层,数据链路层,网络层,运输层,应用层七层模型:物理层,数据链路层,网