芹菜:如何使用 celery.utils.worker_direct

celery: how to use celery.utils.worker_direct

我正在开发一个使用 Celery 来分发任务的项目。为了将任务路由到特定的工作人员(因为它需要由先前任务创建的特定文件),我正在尝试使用 celery.utils.worker_direct.

我做的基本上是这样的:

@app.task(bind=True)
def task_A(self, arg):
    worker = str(self.request.hostname)
    # ...
    s = task_B.s(arg1, worker)
    s.delay()

@app.task
def task_B(arg1, worker):
    task_C.apply_async((arg1, arg2), queue=worker_direct(worker))

@app.task
def task_C(arg1, arg2):
    pass

执行task_C.apply_async((arg1, arg2), queue=worker_direct(worker))时,我得到这个错误:

TypeError: object of type 'Queue' has no len()

我做错了什么?

找到解决方案:

# task_A
worker = worker_direct(self.request.hostname).name

# task_B
task_C.apply_async((arg1, arg2), queue=worker)