各位用户为了找寻关于django框架如何集成celery进行开发的资料费劲了很多周折。这里教程网为您整理了关于django框架如何集成celery进行开发的相关资料,仅供查阅,以下为您介绍关于django框架如何集成celery进行开发的详细内容
上一篇已经介绍了celery的基本知识,本篇以一个小项目为例,详细说明django框架如何集成celery进行开发。
本系列文章的开发环境:
? 1window 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:
? 1$ pip
install
django-celery
2、新建django工程项目test_celery,如下:
【说明】:tools是django包,和test_celery是同级目录,该包功能主要存放工具类函数和执行的任务;
celery.py:celery配置文件信息
3、编辑setting.py,添加配置celery broker和backend
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19#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
, }}
4、新建celery.py文件,添加如下内容:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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))
5、新建tasks.py文件,创建任务
?
1
2
3
4
5
6
7
8
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
6、创建model.py,新建存储任务信息的表:
?
1
2
3
4
5
6
7
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()
#存储开始时间
7、进入test_celery目录下,有manage.py那一层,执行:
?
1
2
python manage.py makemigrations test_celery
python manage.py migrate
到这里会在数据库中生成以下表:
8、接下来编写前端html文件以及view文件,具体请自己编写或者下载源码运行。
9、编码完成后,启动worker,然后就可以在网页上进行模拟操作了
进入test_celery项目目录下,也就是有manage.py文件那一层,执行以下命令启动worker:
? 1celery worker -A test_celery -l info
10、在浏览器中,http://127.0.0.1:8000/index/,录入第一个加数和第二个加数,点击计算,就交给后台tasks执行了,这时可以点击查看任务进行查看。
项目源代码下载
原文链接:http://www.cnblogs.com/mysql-dba/p/6895190.html