Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >python:定时任务模块schedul

python:定时任务模块schedul

作者头像
py3study
发布于 2020-01-22 04:13:53
发布于 2020-01-22 04:13:53
1.2K00
代码可运行
举报
文章被收录于专栏:python3python3
运行总次数:0
代码可运行

1.安装

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install schedule

2.文档

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://schedule.readthedocs.io/en/stable/faq.html#how-to-execute-jobs-in-parallel

3.官网使用demo

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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(5).to(10).minutes.do(job)
schedule.every().monday.do(job)
schedule.every().wednesday.at("13:15").do(job)
schedule.every().minute.at(":17").do(job)

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

4.我的schedule使用demo

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import sys
import time
import schedule
import os
import logging
if not os.path.exists('/var/log/video_download/'):
    os.makedirs('/var/log/video_download')
log = logging.getLogger()
log.setLevel(logging.DEBUG)
fmt = logging.Formatter("%(asctime)s %(pathname)s %(filename)s %(funcName)s %(lineno)s %(levelname)s - %(message)s",
                        "%Y-%m-%d %H:%M:%S")
stream_handler = logging.FileHandler(
    '/var/log/video_download/debug-%s.log' % (time.strftime('%Y-%m-%d', time.localtime(time.time()))))
stream_handler.setLevel(logging.DEBUG)
stream_handler.setFormatter(fmt)
log.addHandler(stream_handler)
def handler():
    print("this is handler")
def main():
    if len(sys.argv) != 2:
        print('python video_data.py hour')
        sys.exit()
    param = sys.argv[1]
    if param == 'hour':
        log.debug("enter main")
        schedule.every().day.at("00:00").do(handler)
        schedule.every().hour.do(handler)
        while True:
            schedule.run_pending()
            time.sleep(1)
    else:
        print("python video_data.py hour")
        sys.exit()


if __name__ == "__main__":
    main()

5.拓展:

  并行执行任务

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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)
schedule.every(10).seconds.do(run_threaded, job)
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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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)抛出异常

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import functools

def catch_exceptions(cancel_on_failure=False):
    def catch_exceptions_decorator(job_func):
        @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
    return catch_exceptions_decorator

@catch_exceptions(cancel_on_failure=True)
def bad_task():
    return 1 / 0

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

  (4)只运行一次

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def job_that_executes_once():
    # Do some work ...
    return schedule.CancelJob

schedule.every().day.at('22:30').do(job_that_executes_once)

  (5)一次取消多个任务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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')

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import functools
import time

import schedule


# This decorator can be applied to
def with_logging(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        print('LOG: Running job "%s"' % func.__name__)
        result = func(*args, **kwargs)
        print('LOG: Job "%s" completed' % func.__name__)
        return result
    return wrapper

@with_logging
def job():
    print('Hello, World.')

schedule.every(3).seconds.do(job)

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

  (7)随机开展工作

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def my_job():
    # This job will execute every 5 to 10 seconds.
    print('Foo')

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

  (8)传参给作业函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def greet(name):
    print('Hello', name)

schedule.every(2).seconds.do(greet, name='Alice')
schedule.every(4).seconds.do(greet, name='Bob')
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/05/15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
网站被CC攻击了怎么办
CC攻击的原理就是攻击者控制某些主机不停地发大量数据包给对方服务器造成服务器资源耗尽,一直到宕机崩溃。CC主要是用来消耗服务器资源的,每个人都有这样的体验:当一个网页访问的人数特别多的时候,打开网页就慢了,CC就是模拟多个用户(多少线程就是多少用户)不停地进行访问那些需要大量数据操作(就是需要大量CPU时间)的页面,造成服务器资源的浪费,CPU长时间处于100%,永远都有处理不完的连接直至就网络拥塞,正常的访问被中止。
用户10621382
2023/11/29
4500
网站防攻击
网站如何防御DDoS攻击和CC攻击?如果网站所在的服务器不是高仿服务器,一旦遭遇DDos攻击或大量的CC攻击,那么自己的网站很有可能会处于瘫痪状态,甚至会引起服务器所在的整个机房服务器受影响,自己的服务器则很有可能陷入“黑洞”或者机房管理员暂时封闭IP,给网站拥有者带来严重的影响。
全栈程序员站长
2022/07/02
2.6K0
网站防攻击
糟糕,系统又被攻击了
几年前,我们的电商平台遭遇过一次CC攻击(一种分布式网络攻击,后面有详细介绍),当时整个网站几乎陷于瘫痪的状态。期间很多PC网页和APP页面打不开或者持续报错,下单流程也彻底跑不通了。
用户7927337
2020/11/04
9390
糟糕,系统又被攻击了
高防服务器如何防御网络攻击?
如今很多互联网公司都会选择高防服务代替普通服务器,因为高防服务器在配置、网络资源等方面都明显好于普通服务器,更重要的是,其防御网络攻击能力强于普通服务器。
墨者安全科技
2019/12/18
7.7K0
DDoS影响越来越严重怎么办?解锁防御DDoS应急措施
DDoS被称为最恐怖的网络攻击,不只是因为防御DDoS成本相对DDoS攻击的成本而言较高,还因其攻击性和破坏性也很强,因此经常被网络黑客利用。目前最大的DDoS攻击事件是美国知名安全研究人员Brian Krebs的安全博客遭遇的DDoS攻击,攻击峰值达到665G。
blublu7080
2021/01/25
7710
DDoS影响越来越严重怎么办?解锁防御DDoS应急措施
被大流量攻击怎样防御,ddos攻击防御方式
通常攻击者使用下载的工具渗透无保护的主机,当获得该主机的适当的访问权限后,攻击者在主机中安装软件的服务或进程。这些代理保持睡眠状态,直到从它们的主控端得到指令,对指定的目标发起拒绝服务攻击。
网e渗透安全部
2019/11/01
4.3K0
被大流量攻击怎样防御,ddos攻击防御方式
浅析DDoS攻击与CC攻击的区别
随着互联网的兴起,各种网络攻击也随之日益频繁,各种恶意网络攻击给许多企业带来口碑、以及财务的巨大损失。近几年,最常见的网络攻击手段主要是DDoS攻击与CC攻击。
墨者安全科技
2019/12/21
2.8K0
浅析DDoS攻击与CC攻击的区别
墨者安全分享:CC攻击的变异品种--慢速攻击
对网络安全有过一定了解的人肯定都听过DDOS攻击和CC攻击,DDOS主要针对IP攻击,CC攻击主要是用来攻击网页的,两者都是通过控制大量僵尸网络肉鸡流量对目标发起攻击的,对于没有高防服务的企业来说简直就是灭顶之灾。而且这两种攻击方式还在不断“进化”,让防御变得越来越困难。今天墨者安全就来说说CC攻击的一个变异品种--慢速攻击。
墨者盾
2018/11/08
1.2K0
墨者安全分享:CC攻击的变异品种--慢速攻击
不同类型的DDoS攻击对应的防御措施有哪些?
DDoS的攻击方式有很多种,最常见的就是利用大量僵尸网络模拟真实流量访问服务器,从而占用服务器资源和带宽拥堵,导致正常用户无法访问。很多互联网企业都有部署DDoS防御措施,但并不是一套方案就可以一劳永逸的。现在DDoS攻击大多数是复合式攻击,越来越复杂化,不同攻击方式对应的防御措施也不一样,今天墨者安全就来分享一下不同类型的DDoS攻击对应的防御措施有哪些?
墨者盾
2019/03/13
1.3K0
不同类型的DDoS攻击对应的防御措施有哪些?
防御DDOS攻击方法
那么什么是拒绝服务(Denial of Service)呢?可以怎么理解,凡是能导致合法用户不能正常访问网络服务的行为都算是拒绝服务攻击。也就是说拒绝服务攻击的目的非常明确,就是要阻止合法用户对正常网络的访问,从而达成攻击者不可告人的目的。
紫禁玄科
2022/03/24
5.4K0
防御DDOS攻击方法
网站遭受cc攻击防御方案
由于动态页面打开速度慢,需要频繁从数据库中调用大量数据,对于cc攻击者来说,甚至只需要几台肉鸡就可以把网站资源全部消耗,因此动态页面很容易受到cc攻击。正常情况静态页面只有几十kb,而动态页面可能需要从几十MB的数据库中调用,这样消耗情况就很明显了,对于论坛来说,往往就需要很好的服务器才能稳定运行,因为论坛很难做到纯静态。
Inkedus
2020/04/16
2.2K0
针对基础网络该如何做好DDOS防御?
今天向一个企业老总学习请教的过程中,聊到了现下关于DDOS攻防的问题。老总说找攻击的高于找防御的。为什么呢?因为大家都知道防御的成本比较高,攻击成本小,而且一部分人抱着他让我不好过,我就要让他更不好过的心里,所以就不会考虑到怎么去做防御。冤冤相报何时了呢?如果我们是一些业务大流量高的行业,经常被攻击使业务受到影响损失是很大的,所以最根本的解决方法是做好网络安全防护措施。
墨者安全科技
2019/08/06
6960
针对基础网络该如何做好DDOS防御?
每天一技:全面了解CC攻击和防范策略
有一个商家正在举行一个活动,凡是参与者都会获得奖品,但是参与者在获得奖品以后用另一个身份继续参与活动,从而造成了商家资源的流失,超过了最大预期峰值,这样就会使活动无法继续进行。
德迅云安全--陈琦琦
2024/04/24
2740
CC攻击和DDOS攻击原理解析
网络安全威胁的日益增加,使得攻击手段的多样化成为当今互联网世界中的现实。本文旨在探讨两种常见的网络攻击形式,即CC(Challenge Collapsar)攻击和DDoS(分布式拒绝服务)攻击,介绍它们的定义、区别以及背后的原理。我们将深入探讨攻击的方式、影响和防御策略,以便更好地了解如何应对这些威胁。
空木白博客
2023/09/21
1.3K0
屡遭CC攻击,互联网行业如何应对?
如今,互联网给企业生活带来了各种各样便利的同时,也给企业带来了各种网络风险。尤其是互联网行业,一直是DDoS、CC等攻击的重灾区,所以,做好攻击防御非常必要。
墨者安全科技
2020/01/04
5830
服务器常见的攻击
一、CC攻击:CC攻击的原理便是攻击者控制某些主机不停地发许多数据包给对方服务器形成服务器资源耗尽,一直到宕机溃散。CC主要是用来攻击页面的,每个人都有这样的体会:当一个网页拜访的人数特别多的时分,翻开网页就慢了,CC便是模仿多个用户(多少线程便是多少用户)不停地进行拜访那些需求许多数据操作(便是需求许多CPU时间)的页面,形成服务器资源的糟蹋,CPU长期处于100%,永远都有处理不完的衔接直至就网络拥塞,正常的拜访被间断。
用户9973510
2022/08/30
1.7K0
浅析DDOS攻击及防御
如今,信息技术的发展为人们带来了诸多便利,无论是个人社交行为,还是商业活动都离不开网络。但是,网络空间在创造机遇的同时,也带来了威胁,其中 DDoS 就是最具破坏力的攻击。经过这些年的不断发展,它已经成为不同组织和个人的攻击形式之一,用于网络中的勒索、报复,甚至网络战争。
iginkgo18
2021/09/11
1.6K0
企业遇上SSL DDOS该采取的有效防御措施有?
现在有很多的用户选择ddos防护安全公司的首要条件就是接入方便,价格便宜,还要拥有专业的技术,24小时服务等等要求。导致出现了越来越多鱼龙混杂的安全防护公司,他们的存在意味着激烈的竞争开启了,使用户本来是可以找到更好,更快,更专业的技术团队的周期延长。他们会不断的在网上搜索,进行攀比。有些因为价格原因选择了低价格着,原本心理还美滋滋的,结果等接入后发现防不住,任然会被打挂,然后再开启寻找模式,同时内心止不住的担忧,怕再一次被骗,想着损失是否可以承担的起?大部分客户还是希望应用程序稳定和在线服务能够及时响应。那么企业遇上SSL DDOS该采取的有效防御措施有?
墨者盾
2019/06/21
4600
企业遇上SSL DDOS该采取的有效防御措施有?
高防服务器有什么用处?
近年来,越来越多的用户选择高防服务器,就是为了防止网站受到攻击,没有高防服务器可能会被攻击,导致网瘫痪。从而失去一些客户,这些损失都是不可估量的。所以,高防服务器是很重要的。那么我们一般受到的网络攻击有哪些呢?
用户10425169
2023/04/10
6K0
高防服务器究竟能防御哪些攻击?
基于DDoS比较广泛,很多机房都会针对DDoS攻击进行,因此,很多企业会选择高防服务器来进行抵御恶意攻击。
尊托云数
2018/11/23
3K0
高防服务器究竟能防御哪些攻击?
相关推荐
网站被CC攻击了怎么办
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验