• 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

  • 相关阅读:
    智能指针的简单实现
    原型模式
    Linux——模拟实现一个简单的shell(带重定向)
    软件开发的一个案例:学生信息管理系统
    关于正则的一点总结
    STL——模拟实现空间配置器
    LeetCode全文解锁 √
    话说extern和static
    C++有关 const & 内敛 & 友元&静态成员那些事
    C语——宏小结
  • 原文地址:https://www.cnblogs.com/zknublx/p/9090168.html
Copyright © 2020-2023  润新知