Django之celery简单使用

Django 中使用 celery

celery 也提供了基于 Django 项目的整合方案。

下载安装模块

pip install django-celery-results
这个是 Django 整合 celery 的模块,包含了所有需要的大量模块。

配置文件

首先需要配置 settings.py 文件。

# Celery settings 
CELERY_BROKER_URL = 'redis://127.0.0.1:6379/5' 
 
#: Only add pickle to this list if your broker is secured 
#: from unwanted access (see userguide/security.html) CELERY_ACCEPT_CONTENT = ['json'] 
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/6' 
CELERY_TASK_SERIALIZER = 'json' 
 
INSTALLED_APPS = ( 
    ..., 
'django_celery_results',) 

其实 celery 推荐使用 RabbitMQ,当然其他的消息中间件也行,这里我就使用 redis 了。
配置 celery 的配置文件,在主模块下创建 celery.py(名称位置都不能错):

# celery.py文件
from __future__ import absolute_import, unicode_literals 
import os 
from celery import Celery 

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings') 
app = Celery('mysite') 
app.config_from_object('django.conf:settings', namespace='CELERY') 
app.autodiscover_tasks() 
 

@app.task(bind=True)
def debug_task(self): 
    print('Request: {0!r}'.format(self.request)) 

在主模块的__init__.py 文件下初始化 celery:

import pymysql pymysql.install_as_MySQLdb()
 
from .celery import app as celery_app

__all__ = ('celery_app',) 

配置异步任务

在需要异步或者定时任务的子模块中创建 tasks.py。

# tasks.py

# Create your tasks here
import time

from __future__ import absolute_import,unicode_literals
from celery
import shared_task,task
import logging 

# pip install django-celery-results 
# celery -A mysite worker --loglevel=info 
# pip install eventlet 
# celery -A mysite worker --loglevel=info -P eventlet 
# python manage.py migrate django_celery_results 
# 定时任务 
# https://www.cnblogs.com/dengshihuang/p/8258621.html
 
@task 
def add(): 
    print("开发发送…………")
    for i in range(10):
    	print(i)
    	print("hhhh")
    	logging.warning(111111111111)
    	time.sleep(1) 
    print("结束发送…………") 

启动异步任务
一般异步任务是在视图函数中启动的。如下:

from .tasks import add


def index(request): 
	# 启动延时任务 
	add.delay() 
    ats = models.Article.objects.all().order_by("-publishTime")     
    return render(request, "index.html", {"articles": ats})

查看是否启动异步任务
在项目的主目录下,执行命令如下,会出现 celery 的异步日志记录,可以查看异步任务执行的情况,如果出现了错误,则执行下面的操作。
celery -A mysite worker --loglevel=info

查看是否启动异步任务,在高版本中启动 celery 的控制台可能出现错误。建议安装如下模块(启动后报错再安装如下模块)。
pip install eventlet
安装后使用这个启动
celery -A mysite worker --loglevel=info -P eventlet

配置定时任务

类似异步操作,装饰器需要修改,注意装饰器的参数问题。

from celery.task.schedules import crontab
from celery.decorators import periodic_task 


@periodic_task(run_every=crontab())
def some_task():
    print('periodic task test!!!!!')

每分钟 0 秒时刻执行一次,其中,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。
crontab(minute=’’, hour=’’, day_of_week=’’, day_of_month=’’, month_of_year=’’)
crontab(minute=15)# 每小时的 15 分时刻执行一次任务
crontab(minute=0, hour=0)# 每天 0 点 0 分时刻执行任务
crontab(minute=‘0,30’) #可以设置多个值。例如 0 分和 30 分执行一次任务
crontab(minute=’
’, hour=‘9-12’)# 指定 9 点到 12 点每个小时的每分钟执行任务
参数如下文档:https://www.cnblogs.com/dengshihuang/p/8258621.html


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值