在主函数中调用异步函数

Vai*_*han 17 python python-3.x python-asyncio

我想知道是否可以def get_all_allowed_systemscreate_app函数中调用异步函数,以便我可以访问由ALLOWED_SYSTEMSget_all_allowed_systems 调用填充的数据库条目。我有一个限制,无法作为create_app异步函数。

async def get_all_allowed_systems(app):
    global ALLOWED_SYSTEMS
    operation = prepare_exec(app.config.get_all_systems_procedure)
    ALLOWED_SYSTEMS = (await app['database'].execute(operation)).all()

def create_app():
    app = App(config=Config)
    app['database'] = AioDatabase(**app.config.dict('db_'))
    app['app_database'] = AioDatabase(app.config.app_db_url)
    get_all_allowed_systems(app)
    print(ALLOWED_SYSTEMS)
Run Code Online (Sandbox Code Playgroud)

Ale*_*lex 24

在 Python 3.7+ 中你可以使用asyncio.run(coroutine())

在早期版本中,您必须获取事件循环并从那里运行:

loop = asyncio.get_event_loop()
asyncio.ensure_future(coroutine())
loop.run_forever()
loop.close()
Run Code Online (Sandbox Code Playgroud)

  • 实际上这对我有用 `loop = get_event_loop()` `loop.run_until_complete(get_all_allowed_systems(app))` (6认同)