芹菜工人和命令行args

2024-06-01 09:34:49 发布

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

我正在重构代码以使用芹菜工人。

在我使用argparse传递命令行参数之前。

例如

if __name__ == "__main__":
     parser = argparse.ArgumentParser(description='Node')
     parser.add_argument('--environment', action="store", default='local', help="env e.g. production of development")
     environment = arg_options.environment

但现在我发现了这个错误。

celery -A tasks worker --loglevel=info --environment local
celery: error: no such option: --environment

我该怎么补充?

如果不需要的话,我不想使用环境变量。

e.g export environment=development

Tags: 代码命令行nameparser参数ifenvironmentmain
2条回答

芹菜工人不执行您的__main__

如果要添加其他命令行选项,可以使用app.user_options, 但请注意,它使用optparse模块,而不是argparse

有关更多信息,请参见文档中的本节:

http://docs.celeryproject.org/en/latest/userguide/extending.html#preload-options

通过查看源代码,我找到了处理这个问题的方法。

芹菜.py添加:

from celery import bootsteps
from celery.bin import Option

....
app.user_options['worker'].add(
    Option('--server', dest='api_server', default='127.0.0.1',
           help='API server to use.')
)

app.conf['API_SERVER'] = '127.0.0.1'

class ConfigBootstep(bootsteps.Step):
    def __init__(self, worker, api_server=None, **options):
        app.conf['API_SERVER'] = api_server

app.steps['worker'].add(ConfigBootstep)

然后在保存任务的文件中添加以下内容:

from celery import current_app
...
@shared_task()
def roboscope():
    API_SERVER = current_app.conf.get('API_SERVER', '127.0.0.1')

我尝试在导入模块时解析API_服务器,使其成为模块全局变量,但由于太早而无法工作。因为我的任务相当繁重,所以跑这么多次也没有坏处。

相关问题 更多 >