windows 下面使用 celery 管理定时任务

news/2024/12/27 2:58:57/文章来源:https://www.cnblogs.com/S-volcano/p/18631296

Python 实现定时任务有以下几种思路

  1. 使用子进程(现成)+ time.sleep 间隔执行
  2. 使用现有的库管理定时任务如,celery, tornado等
  3. 使用系统的机制执行linux 下面 crontab ,windows 下面taskschd.msc

本次调查 celery 这个常用的异步任务管理框架,它有一下好处

  1. 支持分布式
  2. 支持任务确认,即如果worker 重启了, 没有被确认的任务还是会被执行。
通常 python 服务或者任务都是在 linux 平台下面运行。

windows 下面会需要一些特定的前置条件

  1. 需要安装 eventlet 没有这个lib task 不执行。

依赖

pip install eventlet==0.38.2
pip install celery==5.4.0
pip install redis==5.2.1
pip install flower==2.0.1

Demo 代码

from celery import Celery
from celery.schedules import crontab
import time
from loguru import logger
import osCUR_DIR = os.path.dirname(os.path.abspath(__file__))app = Celery('HW', broker='redis://:4NqTyeVc9duG%jha@ys-syn-store.redis.rds.aliyuncs.com:6379/12')@app.on_after_configure.connect
def setup_periodic_tasks(sender, **kwargs):# Calls test('hello') every 10 seconds.sender.add_periodic_task(10.0, test.s('hello'), name='add every 10')# Calls test('hello') every 30 seconds.# It uses the same signature of previous task, an explicit name is# defined to avoid this task replacing the previous one defined.sender.add_periodic_task(30.0, test.s('hello'), name='add every 30')# Calls test('world') every 30 secondssender.add_periodic_task(5.0, add.s(1,2), expires=10)# Executes every Monday morning at 7:30 a.m.sender.add_periodic_task(crontab(hour=7, minute=30, day_of_week=1),test.s('Happy Mondays!'),)@app.task
def test(arg):with open(os.path.join(CUR_DIR, 'test.log'), 'a+', encoding='utf-8') as wh:wh.write(f"{arg}\n")print(arg)logger.info(arg)
@app.task
def add(x, y):z = x + ydata = f"{x}+{y}={z}"with open(os.path.join(CUR_DIR, 'add.log'), 'a+', encoding='utf-8') as wh:wh.write(f"{data}\n")print(data)logger.info(data)

  

运行方式

创建 worker
celery -A tasks worker -c 4 -P eventlet -l INFO创建任务分发器,一个计时器。
celery -A tasks beat -l INFO创建任务管理界面celery -A tasks flower

效果

beat
worker
flower

对比当前的 tornado 实现方式

如果使用celery 实际上会有两个问题:
  1. worker 需要后台运行(服务的方式)
  2. beat 也需要后台运行(服务的方式)
  3. fower 也需要一个后台运行
带来了管理的复杂性, 原来只有一个服务,现在要用2个
好处是,有任务管理界面。
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/858783.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Goby 漏洞发布|CVE-2024-9047 WordPress File Upload 插件 wfu_file_downloader.php 任意文件读取漏洞

漏洞名称:CVE-2024-9047 WordPress File Upload 插件 wfu_file_downloader.php 任意文件读取漏洞 English Name:CVE-2024-9047 WordPress File Upload Plugin wfu_file_downloader.php Arbitrary File Read Vulnerabilit CVSS core: 6.8 漏洞描述: WordPress File Upload插件…

002. 队列安排(洛谷P1160)

002. 队列安排(洛谷P1160) 题目描述 一个学校里老师要将班上 \(N\) 个同学排成一列,同学被编号为 \(1\sim N\),他采取如下的方法:先将 \(1\) 号同学安排进队列,这时队列中只有他一个人;\(2\sim N\) 号同学依次入列,编号为 \(i\) 的同学入列方式为:老师指定编号为 \(i\) …

一个GLSL Shader的格式化算法(LALR解析器)

一个GLSL Shader的格式化算法(LALR解析器) 在进行OpenGL程序开发时,我需要自行解析`string`类型的Shader代码,抽取出里面的某些变量名和subroutine名。 由于找不到可用的GLSL Shader解析器,就照着虎书(《现代编译原理-c语言描述》)自己写了个LALR Generator,实际上包含了…

adb使用教程

谷歌官方出品用来控制安卓手机的工具1、作用打印日志定位bug稳定性测试运行设备的shell命令上传和下载文件安装和卸载设备上的应用等2、adb的安装配置Android开发官网下载ADB压缩包解压压缩包将ADB包放到根目录下将ADB路径加入到环境变量里3、用adb连接手机 进入开发者模式USB连…

中考阅读理解深入逻辑分析-005 A Tale of Bears and Belonging 熊的故事与归属感

文章正文 Dear Mr. Henshaw, ​ I finished Beggar Bears in two nights. It is a really good book. At first, I was surprised because it wasn’t funny like your other books, but then I got to thinking (you said readers should think) and decided a book …

PCIe扫盲——BDF与配置空间

前面的文章中介绍过,每一个PCIe设备可以只有一个功能(Function),即Fun0。也可以拥有最多8个功能,即多功能设备(Multi-Fun)。不管这个PCIe设备拥有多少个功能,其每一个功能都有一个唯一独立的配置空间(Configuration Space)与之对应。 和PCI总线一样,PCIe总线中的每一…

路由器透明代理

​1、下载OpenWrt 找各自路由型号----下载地址:https://firmware-selector.openwrt.org/​ 下载完后我们通过以下步骤让路由器进入刷机模式并准备好刷机:关闭路由器电源 按住复位键并接入电源,此时你会看到电源LED灯变成橙色等闪烁,接着会变为白色灯闪烁,此时可以放开复位…

SpringBoot 集成RabbitMQ

springboot集成MQ 配置文件配置类 发送者 消费者 调用

前端文档生成框架

背景 有时候写项目难免要用到文档框架。VitePress/VuePress 熟悉的vue,不必多说。 https://vitepress.dev/zh/ docsify 28.2k stars https://docsify.js.org/#/ 知名度很高。 docusaurus facebook出品。 https://docusaurus.io/zh-CN/ StoryBook 85k stars https://storybook.…

【YashanDB知识库】通过触发器复制varchar(4000 char)列的数据导致乱码

本文内容来自YashanDB官网,原文内容请见 https://www.yashandb.com/newsinfo/7802969.html?templateId=1718516 问题现象 某客户在使用触发器将varchar(4000 char)列的数据从表A复制到表B时,表B上列的数据与A上对应列的数据不同且为乱码。 如下截图为A的数据及使用触发器复制…

CMFCToolTipCtrl的AddTool导致内存增加

多次调用CMFCToolTipCtrl的AddTool会导致程序内存不断增加,尤其在循环中,因此需要AddTool之前,先进行判断,如果新文本与旧的不相同,才添加,并且添加之前先删除。需要注意的是,提示文本支持最大长度是MAX_TIP_TEXT_LENGTH.该宏在tooltip.cpp line:22定义,值为1024,文本…