我正在尝试使用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_url
和result_backend
,而不仅仅是在上面的实例中调用的broker
和backend
。
更正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 上,则放置打印函数调用)来测试芹菜实际上不会忽略您的文件。