14

I would like to know if it's possible to call an async function def get_all_allowed_systems in create_app function so that I have access to the database entries of ALLOWED_SYSTEMS populated by get_all_allowed_systems call. I have a limitation that I can't make create_app as async function.

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)
vector8188
  • 1,293
  • 4
  • 22
  • 48

1 Answers1

19

In Python 3.7+ you can just use asyncio.run(coroutine())

In earlier versions you have to get the event loop and run from there:

loop = asyncio.get_event_loop()
asyncio.ensure_future(coroutine())
loop.run_forever()
loop.close()
Alex
  • 963
  • 9
  • 11
  • 6
    actually this worked for me `loop = get_event_loop()` `loop.run_until_complete(get_all_allowed_systems(app))` – vector8188 Jun 29 '19 at 22:44