вызвать асинхронную функцию в главной функции - PullRequest
0 голосов
/ 30 июня 2019

Я хотел бы знать, возможно ли вызвать асинхронную функцию def get_all_allowed_systems в create_app функции, чтобы у меня был доступ к записям базы данных ALLOWED_SYSTEMS, заполненным вызовом get_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 = DvmtApp(config=Config)
    app['database'] = AioDatabase(**app.config.dict('db_'))
    app['orassist_database'] = AioDatabase(app.config.orassistdb_url)
    get_all_allowed_systems(app)
    print(ALLOWED_SYSTEMS)

1 Ответ

1 голос
/ 30 июня 2019

В Python 3.7+ вы можете просто использовать asyncio.run(coroutine())

В более ранних версиях вы должны получить цикл обработки событий и запустить его оттуда:

loop = asyncio.get_event_loop()
asyncio.ensure_future(coroutine())
loop.run_forever()
loop.close()
...