美文网首页
Supervisor启动celery4.3实战

Supervisor启动celery4.3实战

作者: 三人行大道 | 来源:发表于2019-11-29 14:23 被阅读0次
在虚拟环境中 pip install celery 即可安装celery

在django项目中使用celery做定时任务
settings.py

from celery import platforms
from celery.schedules import crontab
CELERY_BROKER_URL = 'redis://127.0.0.1:6379/0' # Broker配置,使用Redis作为消息中间件

CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/1' # BACKEND配置,这里使用redis

CELERYD_MAX_TASKS_PER_CHILD = 10  #每个worker执行多少次任务后死亡,防止内存泄漏用的

CELERY_ACCEPT_CONTENT = ['pickle', 'json', 'msgpack', 'yaml']  #接受的文件类型
CELERY_RESULT_SERIALIZER = 'json' # 结果序列化方案

# 允许root 用户运行celery
platforms.C_FORCE_ROOT = True

CELERY_BEAT_SCHEDULE = {
    'logpolar': { # 任务名(随意起)
        # 'task': 'Integration.tasks.lives', # 定时任务函数路径
        'task':"Integration.tasks.logpolar",
        'schedule': datetime.timedelta(seconds=10), # 任务循环时间
        # 'schedule': crontab(hour=0, minute=1),
        # "args": (4,9), # 参数
    },
    'RunTotalVisit': {
            'task': 'Integration.tasks.RunTotalVisit',
            'schedule': datetime.timedelta(seconds=10), # 任务循环时间
            # 'schedule': crontab(hour=0, minute=10),
        }
}

项目目录同名文件夹中init (也就是和setting在同一目录下)

from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app
__all__ = ('celery_app',)

celery.py(也就是和setting在同一目录下)

from __future__ import absolute_import, unicode_literals
import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'data_center.settings')  # 设置django环境

app = Celery('data_center')#data_center是项目名

app.config_from_object('django.conf:settings', namespace='CELERY') #  使用CELERY_ 作为前缀,在settings中写配置

app.autodiscover_tasks()  # 发现任务文件每个app下的task.py

tasks.py 在某个app中tasks.py(这个名字是固定的)

from celery import shared_task
@shared_task
def lives(a,b):
    c = a + b
    return "celery4.3" + c

然后启动项目
接着打开终端进入项目目录,执行下列命令

celery -A 项目名 worker -l info 
celery -A 项目名 beat -l info
接着就可以在终端,看到打印的信息了

用supervisor启动celery,可以使celery后台运行
supervisor的安装与配置

虚拟环境中  pip install supervisor

安装好之后就可以
创建supervisord主进程配置文件

$ echo_supervisord_conf > /etc/supervisord.conf

在项目目录下新建celerylog文件夹,存放celery打印出的信息

把下面内容 追加到 supervisord.conf文件中,启动即可
[program:celery.worker]
command= /home/yue/.virtualenvs/practice/bin/celery -A 项目名 worker -l info
directory=/home/yue/测试celery4.3专用/项目名
user=root
numprocs=1
autostart=true        ;#当supervisor启动时,程序将会自动启动
autorestart=true      ;#自动重启
startretries=3        ;#启动失败时的最多重试次数
redirect_stderr=true  ;#重定向stderr到stdout
stdout_logfile=/home/yue/测试celery4.3专用/项目名/celerylog/celery_worker_out.log

[program:celery.beat]
command=/home/yue/.virtualenvs/practice/bin/celery -A 项目名 beat -l info
directory=/home/yue/测试celery4.3专用/项目名
user=root
numprocs=1  ;#进程数
autostart=true ;#当supervisor启动时,程序将会自动启动
autorestart=true ;#自动启动
startretries=3   ;#启动失败时的最多重试次数
redirect_stderr=true  ;#重定向stderr到stdout
stdout_logfile=/home/yue/测试celery4.3专用/data_center/celerylog/celery_beat_out.log

管理supervisor

启动:sudo supervisord -c /etc/supervisord.conf 在项目中
启动supervisor:supervisord -c supervisord.conf
supervisord -c /etc/supervisor/supervisord.conf 
如果显示端口占用,执行下面命令
查看进程:ps -ef | grep supervisord 
root      15334   6359  0 11:42 ?        00:00:00 /usr/bin/python /usr/bin/supervisord -c supervisord.conf
杀死supervisor进程:kill -s SIGTERM  15334
关闭supervisor:supervisorctl shutdown
重载配置:supervisorctl reload
1 )supervisorctl status

2)supervisorctl stop 

3)supervisorctl start

4)supervisorctl restart 

6)supervisorctl update

最后:supervisord 是 server 端,supervisorctl 是 client 端

crontab 定时 几点几分几秒

其中,crontab()实例化的时候没设置任何参数,都是使用默认值。crontab一共有7个参数,常用有5个参数分别为:
minute:分钟,范围0-59;
hour:小时,范围0-23;
day_of_week:星期几,范围0-6。以星期天为开始,即0为星期天。这个星期几还可以使用英文缩写表示,例如“sun”表示星期天;
day_of_month:每月第几号,范围1-31;
month_of_year:月份,范围1-12。

相关文章

网友评论

      本文标题:Supervisor启动celery4.3实战

      本文链接:https://www.haomeiwen.com/subject/ueuwwctx.html