gpt4 book ai didi

python - 如何检查python是否作为click cli命令而不是flask服务器运行?

转载 作者:行者123 更新时间:2023-12-04 04:21:09 25 4
gpt4 key购买 nike

我有一个小型 Flask 服务器,它使用 click 来定义一些通过 cron 运行的命令。
我的服务器通过 asyncio & asynqp 连接到 Rabbitmq:

class RabbitMQConnection():
def __init__(self):
self.connection = None
self.channel = None
self.exchange = None

@asyncio.coroutine
def connect(self):
self.connection = yield from asynqp.connect(
'rabbitmq-host',
5672,
username=RABBITMQ_USERNAME,
password=RABBITMQ_PASSWORD)

class MessageProcessor(Thread):
def run(self):
loop = asyncio.new_event_loop()
loop.create_task(self._run())
loop.run_forever()

@asyncio.coroutine
def _run(self):
rabbit = RabbitMQConnection()
yield from rabbit.connect()


def init_app(app):
thread = MessageProcessor()
thread.daemon = True
thread.start()

当我运行单击命令时,它会加载 Flask 应用程序(我想要它,因为它包含我的数据库模型),但还会启动与 rabbitmq 的另一个连接。 如果我在单击命令的上下文中运行或仅作为 flask 服务器运行,我希望能够检查上述 init_app 函数。

以下是单击命令定义的示例:
@click.command('my-function')
@with_appcontext
def my_function():
click.echo('this was fun')

def init_app(app):
app.cli.add_command(my_function)

最佳答案

这有点黑客,但它对我有用:

# detect if we are running the app.
# otherwise we are running a custom flask command.
command_line = ' '.join(sys.argv)
is_running_server = ('flask run' in command_line) or ('gunicorn' in command_line)

if is_running_server:
# do stuff that should only happen when running the server.
参见: How do I access command line arguments?

关于python - 如何检查python是否作为click cli命令而不是flask服务器运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59283621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com