celery 定时任务

    xiaoxiao2021-03-25  25

    Celery定时任务

    在celery中执行定时任务非常简单,只需要设置celery对象的CELERYBEAT_SCHEDULE属性即可。

    下面我们接着上面的代码,在celeryconfig.py中添加CELERYBEAT_SCHEDULE变量:

    CELERY_TIMEZONE = 'UTC' CELERYBEAT_SCHEDULE = { 'taskA_schedule' : { 'task':'tasks.taskA', 'schedule': crontab(minute=30, hour=5), 'args':(5,6) } }

    每天的凌晨5点执行taskA 任务。

    启动worker

    celery worker -A src.task --loglevel=info -Q test_celery_queue -f /data/test.celery/celery.log

    启动celery beat

    celery beat -A src.app --loglevel=info --logfile=/data/test.celery/celery.beat.log

    使用supervisor

    [group:test_celery] programs = test_celery.async,test_celery.beat [program:test_celery.async] command=/data/test.celery/env/bin/celery worker -A src.app --loglevel=info -Q test_celery_queue numprocs=1 numprocs_start=0 priority=999 autostart=true startsecs=3 startretries=3 exitcodes=0,2 stopsignal=QUIT stopwaitsecs=60 directory=/data/test.celery user=www-data stopasgroup=false killasgroup=false redirect_stderr=true stdout_logfile=/data/log/test.celery/test_celery.log stdout_logfile_maxbytes=250MB stdout_logfile_backups=10 stderr_logfile=/data/log/test.celery/test_celery.err stderr_logfile_maxbytes=250MB stderr_logfile_backups=10 environment=PYTHONPATH='/data/test.celery/';C_FORCE_ROOT="true" [program:test_celery.beat] command=/data/test.celery/env/bin/celery beat -A src.app --loglevel=info numprocs=1 numprocs_start=0 priority=999 autostart=true startsecs=3 startretries=3 exitcodes=0,2 stopsignal=QUIT stopwaitsecs=60 directory=/data/test.celery user=www-data stopasgroup=false killasgroup=false redirect_stderr=true stdout_logfile=/data/log/test.celery/test_celery.beat.log stdout_logfile_maxbytes=250MB stdout_logfile_backups=10 stderr_logfile=/data/log/test.celery/test_celery.beat.err stderr_logfile_maxbytes=250MB stderr_logfile_backups=10 environment=PYTHONPATH='/data/test.celery/';C_FORCE_ROOT="true"

    简单说明

    test_celery.async 和 test_celery.beat 是两个program,分别对应worker和beat,而它们又同属于 test_celery 这个组,这样便于同时管理。注意到command参数了吗?因为我使用了virtualenv来隔离每个项目的包环境,所以需要明确指出 celery命令所在的目录(如果全局安装了celery就必要了), 这也是为什么上文项目结构中会有一个 env 文件夹的原因。使用了虚拟环境之后, 通常需要先激活环境 source /data/test.celery/env/bin/activateenvironment 下设置 PYTHONPATH 我们在上文中提到过。总之,你要让Python知道你项目包得位置,设置PYTHONPATH 只是一种方式。

    (supervisorctl) 管理程序进程

    通过 sudo supervisorctl 可以进入管理客户端。我们可以使用各种命令管理程序的进程:

    常用的命令有:

    status 查看状态 restart 重新启动 start 启动 stop 停止 update 更新配置

    也可以不进入来管理 ,例如每次更新玩配置,我们可以使其快速生效:

    sudo supervisorctl update

    参考链接: https://github.com/importcjj/notes/issues/2

    转载请注明原文地址: https://ju.6miu.com/read-200086.html

    最新回复(0)