python-2.7 - celery :错误:无法识别的参数:-A,Flask,argparse

标签 python-2.7 flask celery argparse

在基于 Flask 的 Web 应用程序中,采用两个命令行参数 ini 文件名,使用 argparse 的端口号,在同一文件中也定义了 celery 应用程序。但是在运行 celery 应用程序时出现上述错误。

import argparse
from flask import  Flask
from celery import Celery

app = Flask(__name__)
parser = argparse.ArgumentParser(prog="testpgm")
parser.add_argument('-c','--cfgfile', default='domain.ini', help="provide ini      file path")
parser.add_argument('-p','--port', default=5000, help="-p port number eg - 'python run.py -p <port>, default to 5000")
args = parser.parse_args()
ini_path = args.cfgfile
port = args.port

-------- celery 配置--------

app.config["CELERY_QUEUES"] = (
Queue('queue1', Exchange('queue1'), routing_key='queue1')
)
def make_celery(flaskapp):

   #getting celery broker uri
   celery_broker_uri=         CeleryBrokerWrapper().get_broker_uri(broker,username,password,host,port,vhost) 

   celeryinit = Celery(flaskapp.import_name, broker=celery_broker_uri)
   celeryinit.conf.update(flaskapp.config)
   taskbase = celeryinit.Task

   class ContextTask(taskbase):
      abstract = True

      def __call__(self, *args, **kwargs):
         with app.app_context():
             return taskbase.__call__(self, *args, **kwargs)

   celeryinit.Task = ContextTask
   return celeryinit

celery = make_celery(app)

但是当我运行 celery 时使用

celery -A testpgm.celery worker --loglevel=info --concurrency=5 -Q queue1

我收到类似这样的错误

testpgm: error: unrecognized arguments: -A testpgm.celery worker --loglevel=info --concurrency=5 -Q queue1

它看起来像一个 argparse 错误,我如何为我的应用程序自定义 argparse,而不会对 celery 的命令行参数产生问题..

最佳答案

有一个类似的问题,argparse 也为我提示。

快速修复:使用 parse_known_args,而不是 parse_args

args,未知 = parser.parse_known_args()

来源: Python argparse ignore unrecognised arguments

丑陋的修复: 将 celery worker args 定义为您的主应用程序具有的 argparse 的一部分

“做对”修复: 考虑在你的 main 函数中使用 argparse,这样 celery 就不会与之冲突

Handling argparse conflicts

关于python-2.7 - celery :错误:无法识别的参数:-A,Flask,argparse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32522912/

相关文章:

python - 从 Pandas 数据框中删除空格

python - 在pyqt中选中复选框之前如何禁用按钮?

python - 从 flask-reSTLess 返回自定义属性

amazon-web-services - 将使用Celery和Redis的Flask应用程序部署到AWS:直接使用Elastic Beanstalk还是EC2?

macos - 导入失败。无法找到 SCons 文件 : import SCons. 脚本

python - 如何在 Flask 中获取裸 wsgi 流?

python - Flask WSGI 应用程序内存不足

python-2.7 - Celery 消息队列与 AWS Lambda 任务处理

python - 为什么 Celery 在 Python shell 中工作,但在我的 Django View 中却不工作? (导入问题)

python - SocketServer 没有模块正在导入