2016-09-22 59 views
0

说我有一个芹菜工人依赖的大模块上,十调用芹菜任务需要所有工作人员的依赖关系?

由于任务定义需要对工人的应用程序DEF的引用(例如,@ app.task)这意味着我的“客户”(代码调度任务)也需要依赖于这个模块。

这对我没有意义 - 我得到这个错误? A)

A)。我不希望我的任务调用者拥有这些依赖关系(例如,它们可能位于不同的Docker容器中)。

B)。出于安全原因,我不希望我的任务调用者有权访问此代码。

有没有办法解决它?

感谢,

RB

回答

2

你的客户端代码可以远程启动任务,而无需导入任务的落实。你显然必须配置客户端连接到同一代理的工人,但一旦做到这一点,那么你可以使用signatures调用任务:

import celery 
result = celery.signature("app.tasks.foo", args=(1,)).delay().get() 

的第一个参数celery.signature是任务的名称。它通常是包含任务的模块的绝对名称(例如,上面代码中的app.tasks)加上任务名称(foo)。

+0

谢谢路易斯。这里的问题,但: 在我的模块worker.py,我定义了“应用程序”具有整个芹菜配置。但芹菜工人的“客户”只需要运输配置(例如,BROKER_URL)。然而,“客户端”(调用者)也必须引用tasks.py,并且该模块需要引用Celery应用程序实例。 为什么工人的实际工作人员和客户端依赖于相同的应用程序实例?我知道他们都需要相同的传输配置,但没有其他共同点? – rsb

+0

我想,我的问题是调用者需要哪些配置属性(鉴于文档假设两者都使用相同的实例),在我的情况下,调用者和工作者位于不同的码头容器中。 – rsb