Django异步任务之Celery

释放双眼,带上耳机,听听看~!

Celery

celery 是一个用于实现异步任务的库, 在很多项目中都使用它, 它和 django 融合使用很完美. 使用 celery 可以在实现 http request请求返回 view 前做一些我们想做的而且耗时的事情而不会让用户等待太久

环境

django 版本 == 1.11.6

celery 版本 == 3.1.25

安装

pip install django-celery
pip install celery

 

首先需要将 celery 添加到 django 项目的 settings 里, celery 任务和 django 需要一个 中间人(broker),,这里使用的是 django 自带的 broker, 但在生产中一般使用 rabbitmq, Redis 等,在 INSTALLED_APP 中需要添加 djcelery 和 kombu.transport.django, 还有 app 应用。

- project/project/ settings.py:

import djcelery

djcelery.setup_loader() 
BROKER_URL = \'django://\'

INSTALLED_APP = (
    ...
    \'app\'
    \'djcelery\',
    \'kombu.transport.django\',
)

新建 celery.py 创建一个 celery 应用,并添加以下内容

- project/project/ celery.py:

# 相对路径导入, 防止导入 celery 时冲突
from __future__ import absolute_import
import os
from celery import Celery
from django.conf import settings

# 让 celery 能找到 django 项目
os.environ.setdefault(\'DJANGO_SETTINGS_MODULE\', \'project.settings\')
# 创建一个 celery 应用
app = Celery(\'project\')

# 导入配置
app.config_from_object(\'django.conf:settings\')
# 自动发现 task
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

@app.task(bind=True)
def debug_task(self):

    print(\'Request: {0!r}\'.format(self.request))

- project/project/ __init__.py:

from __future__ import absolute_import

# This will make sure the app is always imported when
# Django starts so that shared_task will use this app.
from .celery import app as celery_app

在 django app 中添加任务,文件名必须是 tasks.py, 在普通 python 函数前加一个 @task() 装饰器就变成了 celery task

project/app/ tasks.py:

from celery.task import task
from time import sleep

@task()
def helloWorld():
    print \'helloWorld\'
    sleep(10)
    print \'helloWorld\'
    return \'helloCelery\'

这样,一个任务就创建成功了,只剩下在 view 中调用了

project/app view.py:

from tasks.py import helloWorld

def home():

    helloWorld.delay()

    return HttpResponse(\'helloCelery\')

最后

python manage.py migrate

 

给TA打赏
共{{data.count}}人
人已打赏
随笔日记

增长中的时间序列存储(Scaling Time Series Data Storage) - Part I

2020-11-9 3:57:12

随笔日记

Python入门必学,用Python练习画个美队盾牌

2020-11-9 3:57:14

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索