TimeoutError aiogram 机器人

TimeoutError aiogram bot

我有一个机器人可以解析用户提供的一些链接。
当客户想要解析大量链接时,机器人会解析它们,从这些链接创建 csv 文件,并将其发送给用户(用户可以下载并查看此文件)然后引发 TimeoutError

Cause exception while getting updates.
Traceback (most recent call last):
  File "/Users/alex26/miniforge3/envs/rq/lib/python3.8/site-packages/aiogram/dispatcher/dispatcher.py", line 381, in start_polling
    updates = await self.bot.get_updates(
  File "/Users/alex26/miniforge3/envs/rq/lib/python3.8/site-packages/aiogram/bot/bot.py", line 110, in get_updates
    result = await self.request(api.Methods.GET_UPDATES, payload)
  File "/Users/alex26/miniforge3/envs/rq/lib/python3.8/site-packages/aiogram/bot/base.py", line 231, in request
    return await api.make_request(await self.get_session(), self.server, self.__token, method, data, files,
  File "/Users/alex26/miniforge3/envs/rq/lib/python3.8/site-packages/aiogram/bot/api.py", line 139, in make_request
    async with session.post(url, data=req, **kwargs) as response:
  File "/Users/alex26/miniforge3/envs/rq/lib/python3.8/site-packages/aiohttp/client.py", line 1138, in __aenter__
    self._resp = await self._coro
  File "/Users/alex26/miniforge3/envs/rq/lib/python3.8/site-packages/aiohttp/client.py", line 559, in _request
    await resp.start(conn)
  File "/Users/alex26/miniforge3/envs/rq/lib/python3.8/site-packages/aiohttp/client_reqrep.py", line 913, in start
    self._continue = None
  File "/Users/alex26/miniforge3/envs/rq/lib/python3.8/site-packages/aiohttp/helpers.py", line 721, in __exit__
    raise asyncio.TimeoutError from None
asyncio.exceptions.TimeoutError

我的机器人的一些示例(这不是真正的代码,那是示例):


bot = Bot(token=API_TOKEN)
dp = Dispatcher(bot)

def parse_1000_links():
    #it takes about 10 mins and therefore that's the same like sleep(600)
    sleep(600)


@dp.message_handler()
async def msg_handler(message: types.Message):
    if msg == 'parse 1000 links':
        res = parse_1000_links()
        create_csv_from_res(res)
        file_open_obj = open('data.csv', 'rb')
        await bot.send_document(message.from_user.id, file_open_obj)
.....


if __name__ == '__main__':
    executor.start_polling(dp, skip_updates=True)

用户甚至可以从 bot 获取最终文件,但在将此文件发送给用户后,bot 会引发此错误。真奇怪。如果用户收到消息,则表示一切正常(这是我的意见)
如何解决我的问题?
谢谢

您应该避免使用阻塞操作,因为它们会冻结所有事件循环。

如果您不能使用异步版本的依赖项,请使用执行器: https://docs.python.org/3/library/asyncio-eventloop.html#executing-code-in-thread-or-process-pools