将命令行参数传输到Tas

2024-06-25 23:22:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在努力将额外的命令行参数传输到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

我需要使用一些额外的持久性层吗,比如持久性对象,还是我遗漏了一些非常明显的东西?在

Similar question


Tags: 命令行selfsend参数属性environmentdefargs
1条回答
网友
1楼 · 发布于 2024-06-25 23:22:17

这似乎不可能。原因是您的任务可以被队列的任何使用者在任何地方使用,并且每个使用者都有不同的命令行参数,因此它的处理不应该依赖于worker配置。在

如果您的问题是管理环境开发/生产,这是我们在项目中管理它的方式:

每个环境都被囚禁在它的venv中,它有一个配置,这样项目就可以自我意识到它的环境(在我们的例子中,只是配置中的db链接发生了变化)。每个环境都有自己的队列和使用以下命令启动的芹菜工人:

/path/venv/bin/celery worker -A async.myapp  workdir /path -E -n celery-name@server -Ofair

希望有帮助。在

如果您真的想深入研究这个问题,那么每个任务都可以访问一个.control,它允许在芹菜上启动控制操作(比如一些监视)。但我没有发现任何有用的东西。在

相关问题 更多 >