假设我有一个依赖于大模块 X 的 celery worker。
由于任务定义需要对工作应用定义的引用(例如,@app.task),这意味着我的“客户端”(调度任务的代码)也需要依赖于这个模块。
这对我来说没有意义——我弄错了吗?
一种)。我不希望我的任务调用者具有这些依赖项(例如,它们可能位于不同的 docker 容器中)。
B)。出于安全原因,我不希望我的任务调用者访问此代码。
有办法解决吗?
谢谢,
RB
您的客户端代码可以远程启动任务,而无需导入任务的实现。您显然必须将客户端配置为连接到与工作人员相同的代理,但是一旦完成,您就可以使用签名来调用任务:
import celery
result = celery.signature("app.tasks.foo", args=(1, )).delay().get()
Run Code Online (Sandbox Code Playgroud)
to的第一个参数celery.signature是任务的名称。它通常是包含任务的模块的绝对名称(例如app.tasks在上面的代码中)加上任务名称 ( foo)。