关于windows下django使用celery实现异步调用(RabbitMQ)

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



   


你可能感兴趣的:(python)