在一个基于 Flask 的 Web 应用程序中,使用 argparse 获取两个命令行参数:ini 文件名和端口号。在同一文件中定义了 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的命令行参数产生问题。
sys.argv
。这就是你的解析器正在读取的内容。我们需要知道它看到了什么。并使用parse_known_args
(请参阅文档),以便解析器不会因为无法识别的东西而窒息。 - hpaulj