linux 想要实现轻而易举,但是在windows下我找了诸多办法,总是没办法解决,最终花了一天时间终于搞定。
1:安装pip
先下载get-pip.py,打开链接复制保存
使用:pythonget-pip.py 安装
2:安装RabbitMQ,celery,django-celery
搜索安装erlang 和 RabbitMQ (windows版本)
see:http://www.rabbitmq.com/install-windows.html
使用pip安装kombu、celery、django-celery:
pip install kombu
pip install celery
pip install django-celery
如果没有将pip命令添加到系统路径,就先在命令行 cd C:\Python33\Scripts 后在使用
(记得将C:\Python33换成自己的Python安装路径)
以上内容借鉴:http://talmai-oliveira.blogspot.jp/2012/08/how-to-install-django-celery-in-windows.html
3:在django里面应用celery
首先在project的setting.py里面添加:
import djcelery
djcelery.setup_loader()
BROKER_HOST = "localhost"
BROKER_PORT = 5672
BROKER_USER = "guest"
BROKER_PASSWORD = "guest"
BROKER_VHOST = "/"
INSTALLED_APPS += (
'djcelery', # 加入celery
)
这样就引入django-celery和使用RabbitMQ作为BROKER。
然后使用python manage.py syncdb给celery创建数据表
现在就可以给我们的APP里面建立一个tasks.py了:
from celery.decorators import task
@task
def add(x, y):
return x + y
然后在这个project下开启celery的worker作为后台接受任务:
python manage.py celeryd -l info
以上内容借鉴:http://www.oschina.net/question/25940_24780
4:给我们的project注册celery
在进行完第三步后我就开始在views.py里面调用add来异步执行任务,结果celery返回一个错误:APP No Registry.
开始真的是让我毫无头绪。后来想起第一篇文章里的官方文档这才找到答案。
原来一个project想要使用celery,必须在project里面进行注册:
在与setting.py同级目录下创建celery.py:
import os
from celery import Celery
# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')
from django.conf import settings
app = Celery('proj')
# 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))
复制以上代码,并将'proj'替换成自己的project名称。
打开当前目录的__init__.py:
添加:from .celery import app as celery_app
5: 大功告成
现在就可以使用了:
python manage.py shell
>>> from proj.app.tasks import add
>>> r = add.delay(3,5)
>>> return 'dd'
dd
NOTE:还有一种方法时间不多就没有尝试了,大家有时间可以看看:
http://www.liaoxuefeng.com/article/00137760323922531a8582c08814fb09e9930cede45e3cc000
现在 zz