首页 > 系统相关 >windows 下面使用 celery 管理定时任务

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

时间:2024-12-25 19:43:15浏览次数:9  
标签:task windows 任务 celery add every test 定时

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 os

CUR_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 seconds
    sender.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 + y
    data = 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个 好处是,有任务管理界面。  

标签:task,windows,任务,celery,add,every,test,定时
From: https://www.cnblogs.com/S-volcano/p/18631296

相关文章

  • 仓颉编程语言首次使用体验——windows下环境配置及入门
    仓颉编程语言是华为研发的一种静态强类型、编译型语言。注意这里的静态,强类型,编译型。同时符合这三个特性的常见语言有:C++RustGoSwiftJava(有区别,java编译为字节码)如果你熟悉上面这些语言,就可以立马了解对仓颉语言有一些感性的认识,这意味仓颉并不是像javascript,python这种语......
  • Windows交叉编译MNN-3.0.0安卓版本库
    一、写在前面以下的步骤、流程都是基于MNN的文档,再结合自己的实践得出的,仅作为参考。博主的环境是windows10专业版MNN文档MNN的Github仓库地址二、下载MNN-3.0.0主库在GitHub仓库进行项目克隆,截至2024.12.25,最新版本就是为3.0.0:gitclonehttps://github.com/alibaba/MNN......
  • STM32单片机定时器定时方法计算
    定时器是STM32单片机非常常见的外设,使用定时器来设置定时时间需要配置预分频系数(Prescaler)和自动重装载值(CounterPeriod)。 假设设置一个500ms的定时器,时钟频率72MHz,把预分频系数设置为7200(即写入预分频寄存器的值为7200-1),72MHz/7200=10KHz,这样就得到计数器的计数频......
  • NSSM工具 : 将 .exe 程序安装成 Windows 服务
    1、下载NSSMNSSM:theNon-SuckingServiceManagerhttps://nssm.cc/usage2、方式一:cmd方式安装服务将下载的压缩包解压,找到nssm.exe,以管理员身份打开cmd,在cmd中定位到nssm.exe所在路径,执行nssminstall服务名:按下enter键会自动弹出nssm的窗体:在Application-Application......
  • Windows 彻底卸载RabbitMQ
    要在Windows系统上彻底卸载RabbitMQ,确保删除所有相关文件和配置,请按照以下步骤操作:1.卸载RabbitMQ和Erlang打开“控制面板”,选择“程序和功能”。在已安装的程序列表中,找到“RabbitMQServer”,右键单击并选择“卸载”。同样地,找到“ErlangOTP”,右键单击并选择“卸载......
  • Windows 11 系统右键菜单默认显示全部选项的方法(亲测有效)
    本章目录:win11中默认右键效果如下:修改后效果如下:Win+R输入CMD打开终端:复制下方命令:输入终端:==重点:重启资源管理器,非常重要(参考其它教程都没有这一步)==输入终端:返回桌面,试验效果如下:win11中默认右键效果如下:修改后效果如下:Win+R输入CMD打开终端......
  • jquery定时器
    jquery定时器|Id|Title|DateAdded|SourceUrl|PostType|Body|BlogId|Description|DateUpdated|IsMarkdown|EntryName|CreatedTime|IsActive|AutoDesc|AccessPermission||-------------|-------------|-------------|-------------|----------......
  • Windows结束指定端口进程
    Windows结束指定端口进程|Id|Title|DateAdded|SourceUrl|PostType|Body|BlogId|Description|DateUpdated|IsMarkdown|EntryName|CreatedTime|IsActive|AutoDesc|AccessPermission||-------------|-------------|-------------|-------------|......
  • Windows结束某个端口的进程
    Windows结束某个端口的进程|Id|Title|DateAdded|SourceUrl|PostType|Body|BlogId|Description|DateUpdated|IsMarkdown|EntryName|CreatedTime|IsActive|AutoDesc|AccessPermission||-------------|-------------|-------------|-------------......
  • windows环境下elasticsearch分词器elasticsearch-analysis-ik安装
    windows环境下elasticsearch分词器elasticsearch-analysis-ik安装|Id|Title|DateAdded|SourceUrl|PostType|Body|BlogId|Description|DateUpdated|IsMarkdown|EntryName|CreatedTime|IsActive|AutoDesc|AccessPermission||-------------|-------......