Celery+python+redis异步执行定时任务

我之前的一篇文章中写了【Celery+django+redis异步执行任务】 
博文:http://blog.csdn.net/apple9005/article/details/54236212 
你会发现,这些代码并不依赖django框架,随便写到一个py文件中,就可以轻松的执行成功,这是因为这些代码并没有用到django-celery,django-redis等依附于django框架的东西。 
今天,参照官方文档示例,测试一下celery的异步执行定时任务如何。我先是在django框架内执行了一遍,没有问题;现在直接写个py文件,命令行下执行试试

1.环境搭建

通过pip 安装 celery、redis 
pip install celery 
pip install redis

默认安装celery 最新版是4.0.2 
默认安装redis 最新版是2.10.5

另外不要忘记安装redis服务:

# wget http://download.redis.io/releases/redis-3.2.6.tar.gz
# tar xzf redis-3.2.6.tar.gz
# cd redis-3.2.6
# make
# src/redis-server   # 启动redis服务,看清楚,这是在你的redis-3.2.6目录下执行的
# src/redis-cli   # 启动客户端

2.编写py

直接vim搞起了

$ vim tesks.py
from celery import Celery
from celery.schedules import crontab

app = Celery(‘tasks‘, broker=‘redis://localhost:6379/0‘)

@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(‘world‘) every 30 seconds
    sender.add_periodic_task(30.0, test.s(‘world‘), 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):
    print(arg)

按住shift键+Z+Z,保存文件并退出

3.在新命令窗口中启动redis服务

怎么启动? 
进入你的redis目录

$ cd redis-3.2.6
$ src/redis-3.2.6

4.在新窗口中启动celery

进入你tasks.py所在目录,执行:

$ celery -A tasks worker --loglevel=info

此时,异步服务已经可用了,但定时任务并没有执行,怎么回事?你还需要再启动另一服务,如下

5.在新窗口中启动beat

还是要进入你tasks.py所在目录,执行:

$ celery -A tasks beat

启动后的样子: 

看一下第4步的窗口,是不是有打印输出?good!每隔10秒打印一次hello,每隔30秒打印一次world! 

具体你的项目要设置多长时间执行任务,可参见官方文档的参数说明。 
附官方文档地址:http://docs.celeryproject.org/en/latest/

附:如何监控Celery?

并行处理框架Celery的Web监控管理服务-Flower 
参见链接 
https://my.oschina.net/u/2306127/blog/420929 
http://flower-docs-cn.readthedocs.io/zh/latest/index.html

原文地址:https://www.cnblogs.com/zknublx/p/9090168.html

时间: 2024-11-08 04:21:33

Celery+python+redis异步执行定时任务的相关文章

Celery框架实现异步执行任务

Celery 官方 Celery 官网:http://www.celeryproject.org/ Celery 官方文档英文版:http://docs.celeryproject.org/en/latest/index.html Celery 官方文档中文版:http://docs.jinkan.org/docs/celery/ Celery架构 Celery的架构由三部分组成,消息中间件(message broker).任务执行单元(worker)和 任务执行结果存储(task result

Celery - 一个懂得 异步任务 , 定时任务 , 周期任务 的芹菜

1.什么是Celery?Celery 是芹菜Celery 是基于Python实现的模块, 用于执行异步定时周期任务的其结构的组成是由    1.用户任务 app    2.管道 broker 用于存储任务 官方推荐 redis rabbitMQ  / backend 用于存储任务执行结果的    3.员工 worker 2.Celery的简单实例 1 from celery import Celery 2 import time 3 4 #创建一个Celery实例,这就是我们用户的应用app 5

Django使用Celery加redis执行异步任务

简单使用 安装celery及redis 定义celery任务 项目下新建tasks.py from celery import Celery # 创建一个Celery类的实例对象 app = Celery('celery_task.tasks', broker='redis://127.0.0.1:6379/8') # 定义任务函数 @app.task def send_register_active_email(message): with open("D:\\celery\\text.txt

celery异步执行任务框架

Celery 官方 Celery 官网:http://www.celeryproject.org/ Celery 官方文档英文版:http://docs.celeryproject.org/en/latest/index.html Celery 官方文档中文版:http://docs.jinkan.org/docs/celery/ Celery异步任务框架 """ 1)可以不依赖任何服务器,通过自身命令,启动服务(内部支持socket) 2)celery服务为为其他项目服务提

Python开发【项目】:RPC异步执行命令(RabbitMQ双向通信)

RPC异步执行命令 需求: 利用RibbitMQ进行数据交互 可以对多台服务器进行操作 执行命令后不等待命令的执行结果,而是直接让输入下一条命令,结果出来后自动打印 实现异步操作 本节涉及最多的还是rabbitmq通信原理知识,要求安装rabbitmq服务 程序用广播topic模式做更好 程序目录结构: 程序简介: # 异步rpc程序 ## 1.需求 - [ ] 利用RibbitMQ进行数据交互 - [ ] 可以对多台服务器进行操作 - [ ] 执行命令后不等待命令的执行结果,而是直接让输入下一

Python celery和Redis入门安装使用(排难帖)

1.redis安装 下载地址 https://github.com/MicrosoftArchive/redis/releases,选择Redis-x64-3.2.100.msi5.8 MB下载就好了 参考http://www.cnblogs.com/jaign/articles/7920588.html,图文并茂,很详细了.不过密码设置那里可以不用. 不然可能会导致celery连接异常: consumer canot connect to redis 1.要安装Redis,首先要获取安装包.W

python实现异步调用函数执行

在实现异步调用之前我们先进行什么是同步调用和异步调用 同步:是指完成事务的逻辑,先执行第一个事务,如果阻塞了,会一直等待,直到这个事务完成,再执行第二个事务,顺序执行 异步:是和同步相对的,异步是指在处理调用这个事务的之后,不会等待这个事务的处理结果,直接处理第二个事务去了,通过状态.通知.回调来通知调用者处理结果 分析一下,下面的例子: 定义了一个装饰器 async 和 A .B 两个function 函数A 里面sleep 10s , 然后打印 a function 字符串 B 里面直接打印

django celery的分布式异步之路(一) hello world

设想你遇到如下场景: 1)高并发 2)请求的执行相当消耗机器资源,流量峰值的时候可能超出单机界限 3)请求返回慢,客户长时间等在页面等待任务返回 4)存在耗时的定时任务 这时你就需要一个分布式异步的框架了. celery会是一个不错的选择.本文将一步一步的介绍如何使用celery和django进行集成,并进行分布式异步编程. 1.安装依赖 默认你已经有了python和pip.我使用的版本是: python 2.7.10 pip 9.0.1virtualenv 15.1.0 创建沙盒环境,我们生产

Celery—分布式的异步任务处理系统

Celery 1.什么是Clelery Celery是一个简单.灵活且可靠的,处理大量消息的分布式系统 专注于实时处理的异步任务队列 同时也支持任务调度 Celery架构 Celery的架构由三部分组成: ● 消息中间件(message broker) ● 任务执行单元(worker) ● 任务执行结果存储(task result store) 消息中间件 Celery本身不提供消息服务,但是可以方便的和第三方提供的消息中间件集成.包括,RabbitMQ, Redis等等 任务执行单元 Work