IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python 实现定时任务,推荐APScheduler框架(样例代码附带进程间通信) -> 正文阅读

[Python知识库]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

总结

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

分享:

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

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

?

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-03-04 15:30:49  更:2022-03-04 15:31:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 22:35:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码