from celery import current_app, task, uuid from celery.five import Queue, range from celery.worker.consumer import Consumer from celery.worker.job import Request from celery.concurrency.solo import TaskPool from celery.app.amqp import TASK_BARE from time import time from librabbitmq import Message import socket import sys @task(accept_magic_kwargs=False) def T(): pass tid = uuid() P = TaskPool() hostname = socket.gethostname() task = {'task': T.name, 'args': (), 'kwargs': {}, 'id': tid, 'flags': 0} app = current_app._get_current_object() def on_task(req): req.execute_using_pool(P) def on_ack(*a): pass m = Message(None, {}, {}, task) x = Consumer(on_task, hostname=hostname, app=app) x.update_strategies() name = T.name ts = time() for i in range(100000): x.strategies[name](m, m.body, on_ack) print(time() - ts)