Django+Celery+Redis 使用

2020-06-22  本文已影响0人  朱佩奇被占用

pip install django==2.1.4
pip install redis==3.2.0
pip install celery==4.4.2
pip install eventlet # celery 4.0+版本以后不支持在windows运行,还需额外安装eventlet库

settings.py配置

CELERY_BROKER_URL = 'redis://localhost'
CELERY_ACCEPT_CONTENT = ['json']
CELERY_RESULT_BACKEND = 'redis://localhost'
CELERY_TASK_SERIALIZER = 'json'

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379",  # 这里设定了本机的redis数据
        # "LOCATION": "redis://:passwordpassword@47.193.146.xxx:6379/0", # 如果redis设置密码的话,需要以这种格式host前面是密码
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    }
}

在同级目录下还需要添加celery.py文件

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

# 指定Django默认配置文件模块
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'linfen.settings')

# 为我们的项目myproject创建一个Celery实例。这里不指定broker容易出现错误。
app = Celery('linfen', broker='redis://127.0.0.1:6379/0')

# 这里指定从django的settings.py里读取celery配置
app.config_from_object('django.conf:settings')

# 自动从所有已注册的django app中加载任务
app.autodiscover_tasks()


# 用于测试的异步任务
@app.task(bind=True)
def debug_task(self):
    print('Request: {0!r}'.format(self.request))

在settings.py 同级的init.py 写入下面内容 确保项目启动时即加载Celery实例:

from __future__ import absolute_import, unicode_literals

# 引入celery实例对象
from .celery import app as celery_app

__all__ = ('celery_app',)

在模块中添加tasks.py

from celery import Celery, shared_task

@shared_task(bind=True)
def insert_search_result(self, search):
    if search:
        search_id = search['search_id']
        cday = search['cday']
        json_search = search['json_search']
        td_len = search['td_len']
        sr = SearchResult()
        sr.search_id = search_id
        sr.createtime = cday
        sr.req = json_search
        sr.result_size = td_len
        sr.save()
        return True
    else:
        return False

最后可在其他文件中调用此任务函数,以达到异步:

isr = tasks.insert_search_result.delay(search_dic)

启动redis 和django 然后打开terminal 输入如下内容 启动worker:

 # Linux下测试
 Celery -A myproject worker -l info
 
 # Windows下测试
 Celery -A myproject worker -l info -P eventlet

更具体的介绍可以参考https://zhuanlan.zhihu.com/p/139951976?utm_source=wechat_session&utm_medium=social&utm_oi=902276942420668416

上一篇下一篇

猜你喜欢

热点阅读