django1.11.21 djcelery3.3定时异步任务

栏目: Python · 发布时间: 6年前

celery==3.1.26

Django==1.11.21

django-celery==3.3.0

flower==0.9.3

kombu==3.0.37

redis==2.10.6

创建项目

django-admin.py startproject celery_test

创建app

python manange.py startapp kecelety

在app中创建tasks.py

celery_test]# cat kecelety/tasks.py

#!/usr/bin/env python

#coding:utf-8

import django

django.setup()

from celery import task, platforms

import time

# 允许root 用户运行celery

platforms.C_FORCE_ROOT = True

@task

def say_hello():

#主要是为了测试异步功能,让他休眠5秒再打印,这样就避免打印和views.py中的返回同时执行,

#其实是异步执行,为了肉眼效果就加上休眠

time.sleep(5)  

print "say_hello()..."

return 0

@task

def add(x,y):

print(x,y)

return x+y

@task

def test(arg1, *arg2, **arg3):

print(arg1, arg2, arg3)

return 0

添加异步队列

celery_test]# cat kecelety/views.py

# -*- coding: utf-8 -*-

from __future__ import unicode_literals

from django.shortcuts import render

# Create your views here.

from django.http import HttpResponse

from .tasks import say_hello

import json

def hello(request):

#添加到消息队列中

r = say_hello.delay()

#执行成功返回True

print r.ready()

print r.successful()

return HttpResponse(json.dumps({'data':'ddd'}))

urls.py

from kecelety.views import *

urlpatterns = [

...

url(r'^c/hello/', hello),

]

setting.py配置

INSTALLED_APPS = [

...

'djcelery',

'kecelety',

'kombu.transport.django', #配合下面的BROKER_URL使用

]

最后添加

import djcelery

djcelery.setup_loader()

CELERY_TIMEZONE = 'Asia/Shanghai'

#息队列界面UI中可以看到

BROKER_URL = 'redis://127.0.0.1:6379/0' #设置 redis 为celery代理

#设置django为celery代理,此时任务消息存储在数据库中,在admin中注册即可在后台看到

#admin.py:

#from kombu.transport.django import models as kombu_models

#admin.site.register(kombu_models)

#BROKER_URL = 'django://' 

CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler' #定时任务用到

CELERYD_MAX_TASKS_PER_CHILD = 3 #  每个worker最多执行3个任务就会被销毁,可防止内存泄露

开启服务

python manage.py celery worker -c 4 --loglevel=info

python manage.py runserver 0.0.0.0:9004

python manage.py celery flower

python manage.py celery beat

可以在admin上添加定时任务,也可以从网

已知错误

https://www.jianshu.com/p/b95bf142dc1b

django celery运行报错 TypeError: can only concatenate list (not "tuple") to list

\lib\site-packages\djcelery\management\commands\celery.py

14     #    options = (CeleryCommand.options +

15     #           base.get_options() +

16     #           base.preload_options)

https://www.cnblogs.com/cpl9412290130/p/10597291.html

celery:Unrecoverable error: AttributeError("'unicode' object has no attribute 'iteritems')

pip uninstall redis

pip install redis==2.10.6


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Probability and Computing

Probability and Computing

Michael Mitzenmacher、Eli Upfal / Cambridge University Press / 2005-01-31 / USD 66.00

Assuming only an elementary background in discrete mathematics, this textbook is an excellent introduction to the probabilistic techniques and paradigms used in the development of probabilistic algori......一起来看看 《Probability and Computing》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试