我正在努力将额外的命令行参数传输到celery任务。我可以在bootstep
中设置所需的属性,但是当直接从任务访问时,相同的属性是emtpy(我猜它会被重写)
class Arguments(bootsteps.Step):
def __init__(self, worker, environment, **options):
ArgumentTask.args = {'environment': environment}
# this works
print ArgumentTask.args
这是定制任务
^{pr2}$和实际任务
@celery.task(base = ArgumentTask, bind = True, name = 'jobs.send')
def send(self):
# this prints empty dictionary
print self.args
我需要使用一些额外的持久性层吗,比如持久性对象,还是我遗漏了一些非常明显的东西?在
这似乎不可能。原因是您的任务可以被队列的任何使用者在任何地方使用,并且每个使用者都有不同的命令行参数,因此它的处理不应该依赖于worker配置。在
如果您的问题是管理环境开发/生产,这是我们在项目中管理它的方式:
每个环境都被囚禁在它的venv中,它有一个配置,这样项目就可以自我意识到它的环境(在我们的例子中,只是配置中的db链接发生了变化)。每个环境都有自己的队列和使用以下命令启动的芹菜工人:
希望有帮助。在
如果您真的想深入研究这个问题,那么每个任务都可以访问一个
.control
,它允许在芹菜上启动控制操作(比如一些监视)。但我没有发现任何有用的东西。在相关问题 更多 >
编程相关推荐