«Цикл событий закрыт» с помощью asyncio/asyncpgPython

Программы на Python
Ответить
Anonymous
 «Цикл событий закрыт» с помощью asyncio/asyncpg

Сообщение Anonymous »

У меня явно есть фундаментальное непонимание того, как работает асинхронность. В Python 3.14 это урезано:
import asyncio
import asyncpg

def adapted_async():
conn = asyncio.run(asyncpg.connect(database='async_test'))
asyncio.run(conn.close())

if __name__ == "__main__":
adapted_async()

... приводит к ошибке RuntimeError: цикл событий закрыт. Насколько я понимаю, asyncio.run() создает новый цикл событий при каждом вызове, но, очевидно, мое понимание было неправильным. Как правильно это сделать?
(Конечно, это чисто синтетический пример.)
Трассировка стека:
RuntimeError: Task got Future attached to a different loop

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/Users/xof/Documents/Dev/async_test/x.py", line 10, in
adapted_async()
~~~~~~~~~~~~~^^
File "/Users/xof/Documents/Dev/async_test/x.py", line 6, in adapted_async
asyncio.run(conn.close())
~~~~~~~~~~~^^^^^^^^^^^^^^
File "/opt/local/Library/Frameworks/Python.framework/Versions/3.14/lib/python3.14/asyncio/runners.py", line 204, in run
return runner.run(main)
~~~~~~~~~~^^^^^^
File "/opt/local/Library/Frameworks/Python.framework/Versions/3.14/lib/python3.14/asyncio/runners.py", line 127, in run
return self._loop.run_until_complete(task)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
File "/opt/local/Library/Frameworks/Python.framework/Versions/3.14/lib/python3.14/asyncio/base_events.py", line 719, in run_until_complete
return future.result()
~~~~~~~~~~~~~^^
File "/Users/xof/Documents/Dev/async_test/.venv/lib/python3.14/site-packages/asyncpg/connection.py", line 1513, in close
await self._protocol.close(timeout)
File "asyncpg/protocol/protocol.pyx", line 640, in close
File "/opt/local/Library/Frameworks/Python.framework/Versions/3.14/lib/python3.14/asyncio/selector_events.py", line 830, in abort
self._force_close(None)
~~~~~~~~~~~~~~~~~^^^^^^
File "/opt/local/Library/Frameworks/Python.framework/Versions/3.14/lib/python3.14/asyncio/selector_events.py", line 902, in _force_close
self._loop.call_soon(self._call_connection_lost, exc)
~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/local/Library/Frameworks/Python.framework/Versions/3.14/lib/python3.14/asyncio/base_events.py", line 827, in call_soon
self._check_closed()
~~~~~~~~~~~~~~~~~~^^
File "/opt/local/Library/Frameworks/Python.framework/Versions/3.14/lib/python3.14/asyncio/base_events.py", line 550, in _check_closed
raise RuntimeError('Event loop is closed')


Подробнее здесь: https://stackoverflow.com/questions/798 ... io-asyncpg
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»