== RabbitMQ + Celery + Django = Install package > aptitude install rabbitmq-server > pip install celery > pip install django-celery = Setup django setting.py > vim myapp/setting.py INSTALLED_APPS = ( 'djcelery', #Add ) import djcelery djcelery.setup_loader() BROKER_HOST = "localhost" BROKER_PORT = 5672 BROKER_USER = "guest" BROKER_PASSWORD = "guest" BROKER_VHOST = "/" CELERY_RESULT_BACKEND = "amqp" CELERYD_LOG_FILE = "celeryd.log" CELERYD_LOG_LEVEL = "INFO" = Put tasks.py under django application # task script name have to be tasks.py and put under applicaion > vim myapp/tasks.py from celery.task import Task from celery.decorators import task @task def add(x, y): logger = Task.get_logger() logger.info("Adding %s + %s" % (x, y)) return x + y = Run celeryd > python manage.py celeryd = Call task from django > python manage.poy shell >>> from myapp.tasks import add >>> r = add.delay(5,6) >>> r.get() 11 = Roting and Worker at diffrent Server Server A> vim settings.py import djcelery djcelery.setup_loader() BROKER_HOST = "192.168.10.10" BROKER_PORT = 5672 BROKER_USER = "guest" BROKER_PASSWORD = "guest" BROKER_VHOST = "/" CELERY_RESULT_BACKEND = "amqp" CELERYD_LOG_FILE = "celeryd.log" CELERYD_LOG_LEVEL = "INFO" CELERY_QUEUES = { "default": { "exchange": "default", "binding_key": "default"}, "videos": { "exchange": "media", "exchange_type": "topic", "binding_key": "media.video", }, "images": { "exchange": "media", "exchange_type": "topic", "binding_key": "media.image", } } Server A> python manage.py celeryd -Q default Server B> vim settings.py import djcelery djcelery.setup_loader() BROKER_HOST = "192.168.10.10" BROKER_PORT = 5672 BROKER_USER = "guest" BROKER_PASSWORD = "guest" BROKER_VHOST = "/" CELERY_RESULT_BACKEND = "amqp" CELERYD_LOG_FILE = "celeryd.log" CELERYD_LOG_LEVEL = "INFO" CELERY_QUEUES = { "default": { "exchange": "default", "binding_key": "default"}, "videos": { "exchange": "media", "exchange_type": "topic", "binding_key": "media.video", }, "images": { "exchange": "media", "exchange_type": "topic", "binding_key": "media.image", } } Server B> python manage.py celeryd -Q video, image = Run task on "Video" quey on worker which run on Server B > vim view.py from tasks import add numbers = [(2,2),(3,3)] results = [] publisher = add.get_publisher(connect_timeout=3) try: for args in numbers: res = add.apply_async( args=args, countdown=10, publisher=publisher, queue="videos", routing_key="media.video", ) results.append(res) finally: publisher.close() publisher.connection.close()