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

Posted 朝阳的向日葵

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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















以上是关于Celery+python+redis异步执行定时任务的主要内容,如果未能解决你的问题,请参考以下文章

python3+celery+redis实现异步任务

Celery 基本使用

xadmin引入celery执行异步任务与定时任务

Python - Celery

django —— Celery实现异步和定时任务

flaskcelery+redis 实现定时任务和异步——