ERROR:asyncio:Task exception was never retrieved выскакиевает при использовании asyncio.WindowsSelectorEventLoopPolicy()

Рейтинг: 1Ответов: 0Опубликовано: 24.02.2023

такая проблема, постоянно вылетала следующая ошибка:

INFO:aiogram:Bot: BotEx [@BotEx]
INFO:aiogram.dispatcher.dispatcher:Start polling.
ERROR:asyncio:Exception in callback _ProactorBasePipeTransport._call_connection_lost(None)
handle: <Handle _ProactorBasePipeTransport._call_connection_lost(None)>
Traceback (most recent call last):
  File "C:\Users\Name\AppData\Local\Programs\Python\Python39\lib\asyncio\events.py", line 80, in _run
    self._context.run(self._callback, *self._args)
  File "C:\Users\Name\AppData\Local\Programs\Python\Python39\lib\asyncio\proactor_events.py", line 162, in _call_connection_lost
    self._sock.shutdown(socket.SHUT_RDWR)
ConnectionResetError: [WinError 10054] Удаленный хост принудительно разорвал существующее подключение
ERROR:asyncio:Exception in callback _ProactorBasePipeTransport._call_connection_lost(None)
handle: <Handle _ProactorBasePipeTransport._call_connection_lost(None)>
Traceback (most recent call last):
  File "C:\Users\Name\AppData\Local\Programs\Python\Python39\lib\asyncio\events.py", line 80, in _run
    self._context.run(self._callback, *self._args)
  File "C:\Users\Name\AppData\Local\Programs\Python\Python39\lib\asyncio\proactor_events.py", line 162, in _call_connection_lost
    self._sock.shutdown(socket.SHUT_RDWR)
ConnectionResetError: [WinError 10054] Удаленный хост принудительно разорвал существующее подключение

БД бота висела на OpenServer. Я подумал, что OS разрывает соединение через 1440сек. Перешел на MySql Server, ошибка осталась та же. Месяцами ранее мне советовали внести в свой код следующую строчку: asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())

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

ERROR:asyncio:Task exception was never retrieved
future: <Task finished name='Task-10' coro=<Dispatcher._process_polling_updates() done, defined at C:\Users\Name\AppData\Local\Programs\Python\Python39\lib\site-packages\aiogram\dispatcher\dispatcher.py:407> exception=RuntimeError("Task <Task pending name='Task-11' coro=<Handler.notify() running at C:\\Users\\Name\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\aiogram\\dispatcher\\handler.py:117> cb=[gather.<locals>._done_callback() at C:\\Users\\Name\\AppData\\Local\\Programs\\Python\\Python39\\lib\\asyncio\\tasks.py:766]> got Future <Task pending name='Task-12' coro=<Pool._wakeup() running at C:\\Users\\Name\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\aiomysql\\pool.py:203>> attached to a different loop")>
Traceback (most recent call last):
  File "C:\Users\Name\PycharmProjects\pythonProject2\db.py", line 34, in user_info
    await cur.execute('SELECT FIO, Phone, Role, Rating, ChatID FROM Users '
  File "C:\Users\Name\AppData\Local\Programs\Python\Python39\lib\site-packages\aiomysql\cursors.py", line 239, in execute
    await self._query(query)
  File "C:\Users\Name\AppData\Local\Programs\Python\Python39\lib\site-packages\aiomysql\cursors.py", line 457, in _query
    await conn.query(q)
  File "C:\Users\Name\AppData\Local\Programs\Python\Python39\lib\site-packages\aiomysql\connection.py", line 469, in query
    await self._read_query_result(unbuffered=unbuffered)
  File "C:\Users\Name\AppData\Local\Programs\Python\Python39\lib\site-packages\aiomysql\connection.py", line 672, in _read_query_result
    await result.read()
  File "C:\Users\Name\AppData\Local\Programs\Python\Python39\lib\site-packages\aiomysql\connection.py", line 1153, in read
    first_packet = await self.connection._read_packet()
  File "C:\Users\Name\AppData\Local\Programs\Python\Python39\lib\site-packages\aiomysql\connection.py", line 598, in _read_packet
    packet_header = await self._read_bytes(4)
  File "C:\Users\Name\AppData\Local\Programs\Python\Python39\lib\site-packages\aiomysql\connection.py", line 646, in _read_bytes
    data = await self._reader.readexactly(num_bytes)
  File "C:\Users\Name\AppData\Local\Programs\Python\Python39\lib\asyncio\streams.py", line 723, in readexactly
    await self._wait_for_data('readexactly')
  File "C:\Users\Name\AppData\Local\Programs\Python\Python39\lib\asyncio\streams.py", line 517, in _wait_for_data
    await self._waiter
RuntimeError: Task <Task pending name='Task-11' coro=<Handler.notify() running at C:\Users\Name\AppData\Local\Programs\Python\Python39\lib\site-packages\aiogram\dispatcher\handler.py:117> cb=[gather.<locals>._done_callback() at C:\Users\Name\AppData\Local\Programs\Python\Python39\lib\asyncio\tasks.py:766]> got Future <Future pending> attached to a different loop

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\Name\AppData\Local\Programs\Python\Python39\lib\site-packages\aiogram\dispatcher\dispatcher.py", line 415, in _process_polling_updates
    for responses in itertools.chain.from_iterable(await self.process_updates(updates, fast)):
  File "C:\Users\Name\AppData\Local\Programs\Python\Python39\lib\site-packages\aiogram\dispatcher\dispatcher.py", line 235, in process_updates
    return await asyncio.gather(*tasks)
  File "C:\Users\Name\AppData\Local\Programs\Python\Python39\lib\site-packages\aiogram\dispatcher\handler.py", line 117, in notify
    response = await handler_obj.handler(*args, **partial_data)
  File "C:\Users\Name\AppData\Local\Programs\Python\Python39\lib\site-packages\aiogram\dispatcher\dispatcher.py", line 256, in process_update
    return await self.message_handlers.notify(update.message)
  File "C:\Users\Name\AppData\Local\Programs\Python\Python39\lib\site-packages\aiogram\dispatcher\handler.py", line 117, in notify
    response = await handler_obj.handler(*args, **partial_data)
  File "C:\Users\Name\PycharmProjects\pythonProject2\handlers.py", line 419, in info
    user = await db.user_info('chatID', message.chat.id)
  File "C:\Users\Name\PycharmProjects\pythonProject2\db.py", line 52, in user_info
    user.chatID = ChatID
  File "C:\Users\Name\AppData\Local\Programs\Python\Python39\lib\site-packages\aiomysql\utils.py", line 139, in __aexit__
    await self._pool.release(self._conn)
RuntimeError: Task <Task pending name='Task-11' coro=<Handler.notify() running at C:\Users\Name\AppData\Local\Programs\Python\Python39\lib\site-packages\aiogram\dispatcher\handler.py:117> cb=[gather.<locals>._done_callback() at C:\Users\Name\AppData\Local\Programs\Python\Python39\lib\asyncio\tasks.py:766]> got Future <Task pending name='Task-12' coro=<Pool._wakeup() running at C:\Users\Name\AppData\Local\Programs\Python\Python39\lib\site-packages\aiomysql\pool.py:203>> attached to a different loop

Мой код для запуска бота и коннекта к бд:

import logging

import asyncio

import sys

import aiomysql

import db


from aiomysql import create_pool

from aiogram.contrib.fsm_storage.memory import MemoryStorage

from aiogram import Bot, Dispatcher, executor


import keyboards
 
from messages import MESSAGES
 
from settings import mysql
 
from config import USER, PASSWORD, HOST, PORT, DATABASE, TOKEN, PAYMENTS_PROVIDER_TOKEN



asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
loop = asyncio.get_event_loop()



client = Bot(token=TOKEN, parse_mode='HTML')

dp = Dispatcher(client, storage=MemoryStorage(), loop=loop)


logging.basicConfig(level=logging.INFO)




async def db_config():
    
      if not mysql.conn:
        
           try:
            
               mysql.conn = await create_pool(
                
               host=HOST,
                
               port=PORT,
                
               user=USER,
                
               password=PASSWORD,
                
               db=DATABASE,
                
               charset='utf8',
                
               use_unicode=True,
                
               loop=loop
            
               )

        
           except aiomysql.Error as e:
            
               print(f'Error connecting: {e}')
            
               sys.exit(1)




if __name__ == '__main__':
    
      loop.run_until_complete(db_config())

    

      from handlers import dp
    
      executor.start_polling(dp, skip_updates=False)


Ответы

Ответов пока нет.