【发布时间】:2015-12-07 23:34:19
【问题描述】:
在基于 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
-------芹菜配置-------
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 的命令行参数问题..
【问题讨论】:
-
抱歉打错了,现在我修改为 queue1
-
celery -h 对我来说很好用..
-
我会尝试 2 件事 - 显示
sys.argv。这就是您的解析器正在读取的内容。我们需要知道它看到了什么。并使用parse_known_args(参见文档),这样解析器就不会阻塞它无法识别的内容。
标签: python-2.7 flask celery argparse