Я пытаюсь получить данные из базы данных для использования в контексте API. Однако я заметил, что conn.close () выполнялось относительно долго (в этом контексте conn - это соединение из пула mysql соединений). Поскольку закрытие соединения не блокирует способность API возвращать данные, я решил использовать asyncio, чтобы закрыть соединение asyn c, чтобы не блокировать возвращаемые данные.
async def get_data(stuff):
conn = api.db.get_connection()
cursor = conn.cursor(dictionary=True)
data = execute_query(stuff, conn, cursor)
cursor.close()
asyncio.ensure_future(close_conn(conn))
return helper_rows
async def close_conn(conn):
conn.close()
results = asyncio.run(get_data(stuff))
Однако, несмотря на факт, что asyncio.ensure_future (close (conn)) не блокируется (я поместил временные операторы, чтобы увидеть, как долго все выполнялось, а те, которые были до и после этой команды, отличались примерно на 1 мс), фактический результат не будет получен, пока close_conn выполнен. (Я проверил это, используя операторы time и разницу во времени между моментом, когда он достигает оператора return в get_data, и когда строка после results = asyncio.run (get_data (stuff)) составляет около 200 мс).
Поэтому мой вопрос заключается в том, как сделать так, чтобы этот код закрывал соединение в фоновом режиме, чтобы я мог go опередить и обработать данные, не дожидаясь их.