Celery (2)- Django中配置使用celery

15 篇文章 0 订阅
6 篇文章 0 订阅

tips:安装配置过程中如果遇到问题可到这里查看和解决:
https://blog.csdn.net/cn_1937/article/details/91992075

安装

pip install django-celery

在这里插入图片描述

构建建项目Django项目

django-admin startproject celery_demo

在这里插入图片描述
先运行一下django项目

python manage.py runserver

创建app

python manage.py startapp mytask

在新创建的app下创建task.py文件夹

from celery.task import Task
import time
from celery import platforms

platforms.C_FORCE_ROOT = True  #root用户启动需要加上这一行

class mytask1(Task):

	# 为任务起名字
	name = 'task1'
	def run(self,*args,**kwargs):
		print('start mytask1 task')
		time.sleep(4)
		print ('args={},kwargs={}'.format(args,kwargs))
		print('end mytask1 task')


celery_demo app下创建celeryconfig.py文件

import djcelery

djcelery.setup_loader()

# 设置任务队列
CELERY_QUEUES = {
	'beat_tasks':{
		'exchange':'beat_tasks',
		'exchange_type':'direct',
		'binging_key':'beat_tasks'
	},

	'work_queue':{
		'exchange':'work_queue',
		'exchange_type':'direct',
		'binging_key':'work_queue'
	}
}

# 默认使用的队列
CELERY_DEFAULT_QUEUE = 'work_queue'


CELERY_IMPORTS = (

	'mytask.task',
)


# 有些情况可以防止死锁
CELERYD_FORCE_EXECV = True

# 设置并发worker数量
CELERYD_CONCURRENCY = 4

# 失败后允许重试
CELERY_ACKS_LATE = True

# 每个worker最多可以执行100个任务被销毁,可以防止内存泄漏
CELERYD_MAX_TASKS_PER_CHILD = 100

# 单个任务的最大运行时间
CELERYD_TASK_TIME_LIMIT = 12 * 30

在settings.py中配置

Celery相关配置

    from .celeryconfig import *
    
    BROKER_BACKEND = 'redis'
    BROKER_URL = 'redis://127.0.0.1:6379/1'
    CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/2'

INSTALLED_APPS中添加

    'djcelery',
    'mytask',

在mytaks app的views中添加视图

from django.http import JsonResponse

# Create your views here.
from . import task

def task_run(request):
	# 执行异步任务
	task.mytask1.delay()
	return JsonResponse({'result':'ok'})


配置urls;

	path('task/',task_run,name='task_run'),

启动运行任务:

python manage.py runserver
# 启动celery
python manage.py celery worker -l INFO

在这里插入图片描述
在浏览器输入 http://127.0.0.1:8000/task/
在这里插入图片描述
在这里插入图片描述
执行异步任务测试成功

创建定时任务

修改task.py

from celery.task import Task
import time
from celery import platforms

platforms.C_FORCE_ROOT = True  #root用户启动需要加上这一行

class mytask1(Task):
	```
		异步任务
	```
	# 异步任务队列
	name = 'task1'
	def run(self,*args,**kwargs):
		print('start mytask1 task--------------------------------1')
		time.sleep(4)
		print ('args={},kwargs={}'.format(args,kwargs))
		print('end mytask1 task----------------------------------1')


class mytask2(Task):
	```
		定时任务
	```
	# 为任务起名字
	name = 'task2'
	def run(self,*args,**kwargs):
		print('start mytask2 task----------------------------------2')
		time.sleep(4)
		print ('args={},kwargs={}'.format(args,kwargs))
		print('end mytask2 task-----------------------------------2')

在celeryconfig中增加定时任务配置

# 定义一个定时任务
CELERYBEAT_SCHEDULE = {
	'task1':{
		'task':'task2',
		'schedule':timedelta(seconds=5),   # 设置任务每5秒执行一次
		'options':{
			'queue':'beat_tasks'          # 指定一个任务队列
		}
	}
}

在终端中启动:

python manage.py celery beat -l INFO   # 启动beat 测试定时任务
python manage.py celery worker -l INFO # 启动worker
python manage.py runserver            # 启动服务器   测试异步任务

在浏览器请求了异步任务接口:
在这里插入图片描述
定时任务启动,每5秒调度器发送一个定时任务
在这里插入图片描述
任务执行结果,定时任务。异步任务都的都执行
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值