У меня явно есть фундаментальное непонимание того, как работает асинхронность. В 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
«Цикл событий закрыт» с помощью asyncio/asyncpg ⇐ Python
Программы на Python
-
Anonymous
1766431991
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')
Подробнее здесь: [url]https://stackoverflow.com/questions/79853131/event-loop-closed-with-asyncio-asyncpg[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия