Python 实现定时任务,推荐APScheduler框架(样例代码附带进程间通信)

简介: Python 实现定时任务,推荐APScheduler框架(样例代码附带进程间通信)

背景

最近在做一些python工具的时候,常常会碰到定时器问题,总觉着使用threading.timer或者schedule模块非常不优雅。所以这里给自己做个记录,也分享一个定时任务框架APScheduler。具体的架构原理就不细说了,用个例子说明一下怎么简易的使用。


样例代码

先上样例代码,如下:

#!/user/bin/env python
# coding=utf-8
"""
@project : csdn
@author  : 剑客阿良_ALiang
@file   : apschedule_tool.py
@ide    : PyCharm
@time   : 2022-03-02 17:34:17
"""
from apscheduler.schedulers.background import BackgroundScheduler
from multiprocessing import Process, Queue
import time
import random
# 具体工作实现
def do_job(q: Queue):
    while True:
        if not q.empty():
            _value = q.get(False)
            print('{} poll -> {}'.format(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()), _value))
        else:
            break
def put_job(q: Queue):
    while True:
        _value = str(random.randint(1, 10))
        q.put(_value)
        print('{} put -> {}'.format(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()), _value))
        time.sleep(1)
if __name__ == '__main__':
    q = Queue()
    scheduler = BackgroundScheduler()
    # 每隔5秒运行一次
    scheduler.add_job(do_job, trigger='cron', second='*/5', args=(q,))
    scheduler.start()
    Process(target=put_job, args=(q,)).start()

代码详解:


1、调度器的选择主要取决于编程环境以及 APScheduler 的用途。主要有以下几种调度器:


apscheduler.schedulers.blocking.BlockingScheduler:当调度器是程序中唯一运行的东西时使用,阻塞式。

apscheduler.schedulers.background.BackgroundScheduler:当调度器需要后台运行时使用。

apscheduler.schedulers.asyncio.AsyncIOScheduler:当程序使用 asyncio 框架时使用。

apscheduler.schedulers.gevent.GeventScheduler:当程序使用 gevent 框架时使用。

apscheduler.schedulers.tornado.TornadoScheduler:当构建 Tornado 程序时使用

apscheduler.schedulers.twisted.TwistedScheduler:当构建 Twisted 程序时使用

apscheduler.schedulers.qt.QtScheduler:当构建 Qt 程序时使用

个人觉着BackgroundScheduler已经很够用了,在后台启动定时任务,也不会阻塞进程。


2、trigger后面跟随的类似linux系统下cron写法,样例代码中是每5秒执行一次。


3、这里加了一个多进程通讯的队列multiprocessing.Queue,主要是样例代码解决的场景是我实际工作中常碰到的,举个栗子:多个进程间通讯,其中一个进程需要定时获取另一个进程中的数据。可以参考样例代码。


执行结果如下:


2022-03-02 19:31:27 put -> 4

2022-03-02 19:31:28 put -> 10

2022-03-02 19:31:29 put -> 1

2022-03-02 19:31:30 poll -> 4

2022-03-02 19:31:30 poll -> 10

2022-03-02 19:31:30 poll -> 1

2022-03-02 19:31:30 put -> 2

2022-03-02 19:31:31 put -> 1

2022-03-02 19:31:32 put -> 6

2022-03-02 19:31:33 put -> 4

2022-03-02 19:31:34 put -> 8

2022-03-02 19:31:35 poll -> 2

2022-03-02 19:31:35 poll -> 1

2022-03-02 19:31:35 poll -> 6

2022-03-02 19:31:35 poll -> 4

2022-03-02 19:31:35 poll -> 8

2022-03-02 19:31:35 put -> 8

2022-03-02 19:31:36 put -> 10

2022-03-02 19:31:37 put -> 7

2022-03-02 19:31:38 put -> 2

2022-03-02 19:31:39 put -> 3

2022-03-02 19:31:40 poll -> 8

2022-03-02 19:31:40 poll -> 10

2022-03-02 19:31:40 poll -> 7

2022-03-02 19:31:40 poll -> 2

2022-03-02 19:31:40 poll -> 3

2022-03-02 19:31:40 put -> 5


Process finished with exit code -1


总结

最近工作比较忙,更新的频率会有所下降。本文主要是自己记录一下,方便查阅。


分享:


       当人一旦从危险里跳出来,他就不再去关注这个事物的危险了,他的目光就会全部落在这个事物的利益上。——《遥远的救世主》


如果本文对你有用的话,点个赞吧,谢谢!


相关文章
|
3月前
|
监控 JavaScript 前端开发
python中的线程和进程(一文带你了解)
欢迎来到瑞雨溪的博客,这里是一位热爱JavaScript和Vue的大一学生分享技术心得的地方。如果你从我的文章中有所收获,欢迎关注我,我将持续更新更多优质内容,你的支持是我前进的动力!🎉🎉🎉
47 0
|
3月前
|
并行计算 数据处理 调度
Python中的并发编程:探索多线程与多进程的奥秘####
本文深入探讨了Python中并发编程的两种主要方式——多线程与多进程,通过对比分析它们的工作原理、适用场景及性能差异,揭示了在不同应用需求下如何合理选择并发模型。文章首先简述了并发编程的基本概念,随后详细阐述了Python中多线程与多进程的实现机制,包括GIL(全局解释器锁)对多线程的影响以及多进程的独立内存空间特性。最后,通过实例演示了如何在Python项目中有效利用多线程和多进程提升程序性能。 ####
|
3月前
|
调度 iOS开发 MacOS
python多进程一文够了!!!
本文介绍了高效编程中的多任务原理及其在Python中的实现。主要内容包括多任务的概念、单核和多核CPU的多任务实现、并发与并行的区别、多任务的实现方式(多进程、多线程、协程等)。详细讲解了进程的概念、使用方法、全局变量在多个子进程中的共享问题、启动大量子进程的方法、进程间通信(队列、字典、列表共享)、生产者消费者模型的实现,以及一个实际案例——抓取斗图网站的图片。通过这些内容,读者可以深入理解多任务编程的原理和实践技巧。
213 1
|
3月前
|
SQL 关系型数据库 MySQL
定时任务频繁插入数据导致锁表问题 -> 查询mysql进程
定时任务频繁插入数据导致锁表问题 -> 查询mysql进程
80 1
|
4月前
|
Python
Python中的多线程与多进程
本文将探讨Python中多线程和多进程的基本概念、使用场景以及实现方式。通过对比分析,我们将了解何时使用多线程或多进程更为合适,并提供一些实用的代码示例来帮助读者更好地理解这两种并发编程技术。
|
4月前
|
存储 Python
Python中的多进程通信实践指南
Python中的多进程通信实践指南
51 0
|
4月前
|
数据挖掘 程序员 调度
探索Python的并发编程:线程与进程的实战应用
【10月更文挑战第4天】 本文深入探讨了Python中实现并发编程的两种主要方式——线程和进程,通过对比分析它们的特点、适用场景以及在实际编程中的应用,为读者提供清晰的指导。同时,文章还介绍了一些高级并发模型如协程,并给出了性能优化的建议。
60 3
|
4月前
|
Python 容器
AutoDL Python实现 自动续签 防止实例过期释放 小脚本 定时任务 apscheduler requests
AutoDL Python实现 自动续签 防止实例过期释放 小脚本 定时任务 apscheduler requests
82 0
|
4月前
|
数据采集 消息中间件 Python
Python爬虫-进程间通信
Python爬虫-进程间通信
31 0
|
5月前
|
数据采集 Linux 调度
Python之多线程与多进程
Python之多线程与多进程
42 0

推荐镜像

更多