我有一台运行Celery和RabbitMQ的服务器。但是当我尝试使用send_task发送任务时,它只返回一个AsyncResult对象 但实际任务没有运行(即使工人和队列是空的)
c = Celery("tasks", broker="amqp://guest@127.0.0.1//")
c.send_task("tasks.printing.test_print", (100), queue="print_queue", routing_key="printing.test_print")
我的芹菜配置是:
CELERY_QUEUES = (
Queue('default', routing_key='task.#'),
Queue('print_queue', routing_key='printing.#'),
)
CELERY_DEFAULT_EXCHANGE = 'tasks'
CELERY_ROUTES = {
'tasks.printing.test_print': {
'queue': 'print_queue',
'routing_key': 'printing.test_print',
}}
BROKER_URL = 'amqp://'
我只执行一名工人:
celery -A celerymain worker --loglevel=debug
这是它的初始日志:
- ** ---------- [config]
- ** ---------- .> app: __main__:0x7eff96903b50
- ** ---------- .> transport: amqp://guest:**@localhost:5672//
- ** ---------- .> results: amqp://
- *** --- * --- .> concurrency: 4 (prefork)
-- ******* ----
--- ***** ----- [queues] -------------- .> default exchange=tasks(topic) key=task.#
.> print_queue exchange=tasks(topic) key=printing.#
[tasks] . test_print
这是任务:
class test_print(Task):
name = "test_print"
def run(self,a):
log.info("running")
print a
rabbitMQ队列'print_queue'保持为空,rabbitMQ日志中没有新内容 我有4 GB的可用空间,所以它不是磁盘空间问题。
这里有什么问题?
答案 0 :(得分:2)
我通过从send_task中删除routing_key参数解决了这个问题 我不知道为什么这是一个问题,但至少它是有效的
答案 1 :(得分:-1)
@app.task(name="test_print")
class test_print(Task):
name = "test_print"
def run(self,a):
log.info("running")
print a