Asyncio начинает скрывать ошибки - PullRequest
2 голосов
/ 23 апреля 2019

Я использую asyncio с веб-сокетами и aiohttp для бота API Twitch.Все было хорошо, но в какой-то момент asyncio начинает скрывать ошибки и превращает код в кирпич.

Через некоторое время я понимаю, что это происходит только в функциях (и вложенных), ожидаемых в asyncio.gather().

Если вы видите на изображениях, я пытаюсь распечатать неразрешенную ссылку, в этот момент нить не работает и ошибки не выбрасываются.

https://cdn.discordapp.com/attachments/532653651689472024/570191503587147776/Screenshot_2.png

Кроме того, странно, что эта часть асинхронного кода (asyncio/events.py), в зависимости от ошибки типа, асинхронное циклическое повторение этой части много раз.Я не знаю, имеет ли это значение.

https://cdn.discordapp.com/attachments/532653651689472024/570191514634944522/Screenshot_4.png

Кроме того, я попытался удалить asyncio с помощью pycharm и pip.Код все еще доступ к asyncio я не знаю, где.У меня не установлены виртуальные среды.Есть ли какой-нибудь способ удалить вручную и попытаться переустановить asyncio чисто?

Кстати, мое приложение все еще работает, это просто факт отсутствия подсказок, когда я что-то пропускаю, что делает прогресс невероятным

1 Ответ

0 голосов
/ 23 апреля 2019

Если вы видите на изображениях, я пытаюсь распечатать неразрешенную ссылку, при этом указать, что поток мертв и нет ошибок.

asyncio.gather выполняет несколько задач одновременно, а по умолчанию распространяет первое исключение любой из поднятых задач. Даже если это исключение не завершило вашу программу, оно как минимум изменило положение вашего переводчика. И в то время как другие собранные задачи продолжают выполняться в фоновом режиме, их исключения не могут быть подняты с новой точки, в которой сейчас находится ваш переводчик.

Исключения возникали в задачах, но нигде не возникали печатаются как предупреждения "Исключение задачи никогда не получалось", когда цикл событий закрыт (обычно в самом конце вашей программы).

Трудно сказать, если это именно то, что происходит в вашем случае, так как вы не предоставили минимальный воспроизводимый пример . Не стесняйтесь предоставить один, чтобы получить более точный ответ.

Кроме того, я попытался удалить asyncio с pycharm и с pip. Код все еще доступ к Asyncio я не знаю, где. у меня нет виртуальные среды установлены. есть ли способ удалить вручную и попробуйте переустановить asyncio чисто?

asyncio является частью стандартной библиотеки Python . Этот модуль не может быть (или, по крайней мере, не должен) (повторно / un) устанавливаться без (re / un) установки самого интерпретатора Python.

...