上一篇已经介绍了celery的基本知识,本篇以一个小项目为例,详细说明django框架如何集成celery进行开发。
本系列文章的开发环境:
window 7 + python2.7 + pycharm5 + celery3.1.25 + django1.9.4
在web应用中,用户触发一个操作,执行后台处理程序,这个程序需要执行很长时间才能返回结果。怎样才能不阻塞http请求,不让用户等待从而提高用户体验呢?这是本例需要解决的问题。具体设计是:用两个网页进行展示,一个网页是提交加法计算任务到后台进行计算;另外一个网页查看所有计算任务的详细情况,如任务ID,任务状态等。
就如下图所示:输入:http://127.0.0.1:8000/index/
点击查看任务链接,查看所有任务的执行情况:sucess表示执行成功,started表示已经开始执行了。
二、项目结构
Broker我这里选择RabbitMQ,结果存储Backend我选择django-celery。
三、开始编程
1、安装django-celery:
$ pip install django-celery
2、新建django工程项目test_celery,如下:
【说明】:tools是django包,和test_celery是同级目录,该包功能主要存放工具类函数和执行的任务;
celery.py:celery配置文件信息
3、编辑setting.py,添加配置celery broker和backend
#celery setting
import djcelery
djcelery.setup_loader() #加载djcelery
BROKER_URL = 'pyamqp://guest@localhost//' #配置broker
BROKER_POOL_LIMIT = 0
CELERY_RESULT_BACKEND='djcelery.backends.database:DatabaseBackend' #配置backend
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'djcelery', #django-celery必须添加
'test_celery',
]
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'celery', 'USER':'username', 'PASSWORD':'password', 'HOST':'ip', 'PORT':3306, }}
from __future__ import absolute_import
import os
from celery import Celery
# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'test_celery.settings')
from django.conf import settings # noqa
app = Celery('test_celery')
# Using a string here means the worker will not have to
# pickle the object when using Windows.
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
@app.task(bind=True)
def debug_task(self):
print('Request: {0!r}'.format(self.request))
from __future__ import absolute_import from celery import shared_task import time @shared_task(track_started=True) def add(x, y): time.sleep(30) #模拟长时间执行 return x + y
from django.db import models #在数据库中生成test_celery_add表 class Add(models.Model): task_id = models.CharField(max_length=128) #存储taskid first = models.IntegerField() #存储第一个加数 second = models.IntegerField() #存储第二个加数 log_date = models.DateTimeField() #存储开始时间
python manage.py makemigrations test_celery python manage.py migrate
到这里会在数据库中生成以下表:
8、接下来编写前端html文件以及view文件,具体请自己编写或者下载源码运行。
9、编码完成后,启动worker,然后就可以在网页上进行模拟操作了
进入test_celery项目目录下,也就是有manage.py文件那一层,执行以下命令启动worker:
celery worker -A test_celery -l info
项目源代码下载
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。




