如何让芹菜从命令行加载配置



我正在尝试使用celery worker在命令行加载配置文件:

celery worker --config=my_settings_module

这似乎不起作用。 芹菜工人启动并使用其默认设置(包括假设 localhost:5672 上有一个可用的 RabbitMQ 服务器) 在我的配置中,我想将芹菜指向不同的地方。 当我将配置文件中的 amqp 设置更改为某些内容时,Celery 似乎并不关心。 它仍然显示默认的 RabbitMQ 设置。

我也尝试了一些假的东西

celery worker --config=this_file_does_not_exist

而芹菜再次不在乎。 工作线程启动并附加到默认的 RabbitMQ。 它甚至没有看 --config 设置

我读到了芹菜是如何懒惰加载的。 我不确定这与此有关。

如何让芹菜工人遵守 --config 设置?

如果你给出一些无效的模块名称或一个不在PYTHONPATH中的模块名称,比如说celery worker --config=invalid_foo,芹菜会忽略它。

您可以通过创建一个简单的配置文件来验证这一点。

$ celery worker -h
--config=CONFIG       Name of the configuration module

如芹菜工人帮助中所述,您应该传递配置模块。否则将引发错误。

如果你只是运行

celery worker

它将启动工作线程,其输出将着色

在同一目录中,使用此行创建一个名为 c.py 的文件。

CELERYD_LOG_COLOR = False

现在运行

celery worker --config=c

它将启动工作线程,其输出不会着色

如果运行 celery worker --config=c.py ,则会引发错误。

celery.utils.imports.NotAPackage: Error: Module 'c.py' doesn't exist, or it's not a valid Python module name.
Did you mean 'c'?

我有完全相同的错误,但我最终发现我在配置模块本身中犯了简单的选项命名错误,这些错误根本不明显。

看,当你开始并按照教程学习时,你最终会在主模块中看到如下所示的内容:

app = Celery('foo', broker='amqp://user:pass@example.com/vsrv', backend='rpc://')

这工作正常,但是后来随着您添加越来越多的配置选项,您决定将这些选项移动到单独的文件中,此时您继续复制+粘贴并将选项拆分为行,直到如下所示:

幼稚my_settings.py:

broker='amqp://user:pass@example.com/vsrv'
backend='rpc://'
result_persistent=True
task_acks_late=True
# ... etc. etc.

你只是自欺欺人!因为在设置模块中,选项被调用broker_urlresult_backend,而不仅仅是在上面的实例中调用的brokerbackend

更正my_settings.py:

broker_url='amqp://user:pass@example.com/vsrv'
result_backend='rpc://'
result_persistent=True
task_acks_late=True
# ... etc. etc.
突然之间

,您的员工在所有设置都到位的情况下启动得很好。

我希望这能治愈像我们这样的芹菜新手的一些头痛。

进一步说明:
您可以通过在设置模块中放置 print-statement(如果您在 Py3 上,则放置打印函数调用)来测试芹菜实际上不会忽略您的文件。

相关内容

  • 没有找到相关文章

最新更新