调用 celery 任务需要所有 worker 依赖?

rsb*_*rsb 5 celery

假设我有一个依赖于大模块 X 的 celery worker。

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

这对我来说没有意义——我弄错了吗?

一种)。我不希望我的任务调用者具有这些依赖项(例如,它们可能位于不同的 docker 容器中)。

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

有办法解决吗?

谢谢,

RB

Lou*_*uis 5

您的客户端代码可以远程启动任务,而无需导入任务的实现。您显然必须将客户端配置为连接到与工作人员相同的代理,但是一旦完成,您就可以使用签名来调用任务:

import celery
result = celery.signature("app.tasks.foo", args=(1, )).delay().get()
Run Code Online (Sandbox Code Playgroud)

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