celery --redis
简单使用:
1、在 celery_task.py中----------配置
import celery import time # redis有密码的情况 # backend='redis://:123456@127.0.0.1:6379/1'
#任务执行完后放入次 队列 backend = 'redis://127.0.0.1:6379/1'
#产生的任务 放到这里 队列 broker = 'redis://127.0.0.1:6379/2'
cel = celery.Celery('test', backend=backend, broker=broker) @cel.task def add(x, y): # time.sleep(3) return x + y
2、生产任务:add_task中
from celery_task import add result = add.delay(4,5) #-----把任务加入队列中 print(result.id)
开启:
运行add.py 生产任务
pychram中终端启动 worker: celery worker -A celery_task -l info -P eventlet
PS:cmd 终端运行 必须先切换到项目目录在执行:celery worker -A celery_task -l info -P eventlet
Django 项目中使用celery 加 redis
settings中配置:
INSTALLED_APPS = [ ..... 'app01', #放到最后 'djcelery', ] # 在最后 from sssss import celeryconfig # 名字不能写错 BROKER_BACKEND = 'redis' BROKER_URL = 'redis://127.0.0.1:6379/1' CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/2'
在与项目同名的文件夹中创建celeryconfig.py
import djcelery djcelery.setup_loader() CELERY_IMPORTS=( #这里注册app01目录创建的task.py 'app01.tasks', #可以注册多个 ) #有些情况可以防止死锁 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
在项目app目录下创建tasks.py 任务文件
from celery import task import time @task def add(a,b): #定义add 任务 print(a+b) # time.sleep(10) return a+b
views中调用:
from django.shortcuts import render,HttpResponse from app01.tasks import add #celery的add任务 from datetime import datetime def test(request): # result=add.delay(2,3) ctime = datetime.now() # 默认用utc时间 utc_ctime = datetime.utcfromtimestamp(ctime.timestamp()) from datetime import timedelta time_delay = timedelta(seconds=5) task_time = utc_ctime + time_delay result = add.apply_async(args=[4, 3]) #调用celery异步任务 print(result.id) return HttpResponse('ok')
url中:
from django.conf.urls import url from django.contrib import admin from app01 import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^test/', views.test), ]
配置END
命令行运行项目
1、先开启server
python manage.py runserver
2、在启动worker
python manage.py celery worker -c 4 --loglevel=info
补充 、celery flower
Django下要查看其他celery的命令,包括参数配置、启动多worker进程的方式都可以通过python manage.py celery --help来查看:
另外,Celery提供了一个工具flower,将各个任务的执行情况、各个worker的健康状态进行监控并以可视化的方式展现,如下图所示:
Django下实现的方式如下:
1. 安装flower:
pip install flower
2. 启动flower(默认会启动一个webserver,端口为5555):
python manage.py celery flower
3. 进入http://localhost:5555即可查看。