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即可查看。

 

posted @ 2019-06-08 12:07  萤huo虫  阅读(335)  评论(0编辑  收藏  举报