django+celery+logging 配置

 

参考链接

celery参考

    celery中文官网:http://docs.jinkan.org/docs/celery/

    celery英文官网:http://docs.celeryproject.org/en/latest

    https://www.cnblogs.com/forward-wang/p/5970806.html

全局参考:

    https://www.zhihu.com/question/51248775

    https://blog.youkuaiyun.com/vintage_1/article/details/47664297(关键)

    http://itfish.net/article/54265.html

    https://www.cnblogs.com/jonathan1314/p/7649249.html

    https://www.jianshu.com/p/7f1cd9caf181

    https://cloud.tencent.com/developer/article/1333721

    https://blog.youkuaiyun.com/pushiqiang/article/details/79405874

    https://blog.youkuaiyun.com/sinat_29699167/article/details/79688464

    https://www.jianshu.com/p/e97ca5315c90

    https://my.oschina.net/kinegratii/blog/292395

    https://github.com/celery/celery/blob/master/examples/django/proj/settings.py

 

rabbitmq:

    https://www.cnblogs.com/royfans/p/10204626.html

    https://blog.youkuaiyun.com/qq_35781732/article/details/79807160

    

celery日志:

    官网:http://docs.jinkan.org/docs/celery/configuration.html#logging

    http://www.itkeyword.com/doc/8500221593510822x204

    https://www.imooc.com/article/27654?block_id=tuijian_wz

    https://stackoverflow.com/questions/18995020/django-celery-task-logging

    https://blog.youkuaiyun.com/qq_27437781/article/details/83507110

    https://www.jianshu.com/p/06f4fa3975d0

    logging 官网:https://docs.python.org/3/library/logging.config.html#logging.config.fileConfig

celery-task-tigger参考:

    https://www.oschina.net/p/celery-task-tigger

    https://github.com/boylegu/celery-task-tigger

一、celery的结构


1.组成流程:
      定时任务    异步任务
                \         /  (发送)
             消息中间件
            /        |      \  (监控)

执行单元   执行单元  执行单元
        \           |           /
            \       |       /      (存储)

             结果存储

2.任务模块:异步任务、定时任务,
        异步任务通常在业务逻辑中被触发并发往任务队列
        定时任务由 Celery Beat 进程周期性地将任务发往任务队列

        两个任务调用不同的线程,没有直接联系

3.消息中间件,即任务队列, 是一种跨线程、跨机器工作的一种机制.
     RabbitMQ
     Redis
     使用数据库

     其他的消息中间键值见官网http://docs.celeryproject.org/en/latest/getting-started/brokers/index.html

4.单个celery 任务的测试

    代码见:https://github.com/duxinn/django-celery/tree/master/celery_app_1

    测试项目celery_app_1目录如下:

celery.py 内容见下

# -*- coding: utf-8 -*-
from celery import Celery

app = Celery('app_1', backend="amqp")  # 创建 Celery 实例
app.config_from_object('celery_app_1.celeryconfig')

celeryconfig.py值的代码见下

from datetime import timedelta
from celery.schedules import crontab

# CELERY_ANNOTATIONS = {'tasks.add': {'rate_limit': '2/s'}}

# 低优先级
CELERY_ROUTES = {
    'tasks.add': 'low-priority',
}

# broker
# BROKER_URL = 'redis://127.0.0.1:6379/10'

# backend
# CELERY_RESULT_BACKEND = 'redis://localhost:6379/11'

CELERY_TASK_SERIALIZER = 'msgpack'  # 任务序列化和反序列化使用msgpack方案

CELERY_RESULT_SERIALIZER = 'json'  # 读取任务结果一般性能要求不高,所以使用了可读性更好的JSON

CELERY_TASK_RESULT_EXPIRES = 60 * 60 * 24  # 任务过期时间,不建议直接写86400,应该让这样的magic数字表述更明显

CELERY_ACCEPT_CONTENT = ['json', 'msgpack']  # 指定接受的内容类型

CELERY_TIMEZONE = 'Asia/Shanghai'

CELERY_IMPORTS = (  # 指定导入的任务模块
    'celery_app_1.task1',
    'celery_app_1.task2'
)

# schedules
CELERYBEAT_SCHEDULE = {
    'add-every-30-seconds': {
        'task': 'celery_app_1.task1.myadd',
        'schedule': timedelta(seconds=3),  # 每 30 秒执行一次
        'args': (1, 1)  # 任务函数参数
    },
    'multiply-at-some-time': {
        'task': 'celery_app_1.task2.mymul',
        'schedule': crontab(hour=9, minute=50),  # 每天早上 9 点 50 分执行一次
        'args': (1, 2)  # 任务函数参数
    }
}

 task1.py中的代码如下:

from __future__ import absolute_import
import time
from .celery import app

@app.task
def myadd(x, y):
    time.sleep(1)
    return x + y

然后,分别启动异步任务进程 work 和定时任务进程 beat ,在celery_app_1的同级目录下:执行

celery -A celery_app_1 worker --loglevel=info

    参数 -A  --app   表示指定哪个项目, 后面是项目名, celery_app_1必须是一个包,里面有__init__.py 文件
    参数 --loglevel 指定了日志级别,默认为 warning,也可以使用 -l info 来表示

celery beat -A celery_app_1

启动后的界面如下

定时任务启动后界面: 

 这个celery测试用的消息中间件是 rabbitmq,直接用的默认的配置,并未对 rabbitmq进行设置

二、消息队列rabbitmq的配置

安装

sudo apt-get install rabbitmq-server

添加用户,myuser为用户名,mypassword为用户密码

sudo rabbitmqctl add_user myuser mypassword

查看用户

sudo rabbitmqctl list_users

新增管理员用户 myuser为用户名密码,administrator为管理员标签

sudo rabbitmqctl set_user_tags myuser administrator

添加虚拟环境

sudo rabbitmqctl add_vhost vhost

设置用户在虚拟环境下拥有所有权限

sudo rabbitmqctl set_permissions -p vhost myuser ".*" ".*" ".*"

可以用刚设置的账户登录管理页面

http://服务器ip:15672 

三、django-celery

完整代码见:https://github.com/duxinn/django-celery/tree/master/dc_1,文章立这里只是把效果和关键配置贴出来

1. 在django的后台可以添加定时任务:

路径为http://ip:端口/admin/djcelery/

点击 Periodic tasks 的添加就可以添加任务,路径http://ip:端口/admin/djcelery/add

下半部分 

Task(registered)  下拉框里面会显示应用下的tasks.py中定义的函数,

Enable 复选框是暂停和激活这个任务,

Interval和crontab可以在http://ip:端口/admin/djcelery/中添加,添加后此页面的下拉菜单中会有选项,

Arguments 是列表形式传入的参数,

Keyword arguments 是字典形式传参,

2. 启动过程

需要启动三个进程,

django进程  python3 manage.py runserver 0.0.0.0:9015

异步任务的work进程 python3 manage.py celery worker

定时任务的beat进程 python3 manage.py celery beat

启动后界面如下

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值