RuntimeError: Timeout context manager should be used inside a task
See original GitHub issueSo, basically I want to use starlette (https://www.starlette.io/) as a webhook for telegram bot and iogram as a way to handle bot messages.
I’ve created an endpoint to get the telegram bot updates:
class UpdateTelegramBotEndpoint(HTTPEndpoint):
async def post(self, request):
update_data = await request.json()
await process_update(update_data)
return JSONResponse(update_data, status_code=200)
The process_update function (I actually don’t know whether it is right to use .set_current() methods, but that’s is not a point):
async def process_update(update_data: dict):
update = Update(**update_data)
Bot.set_current(bot)
Dispatcher.set_current(dispatcher)
return await dispatcher.process_update(update)
Message handler function:
bot = Bot(token=settings.TELEGRAM_API_KEY)
dispatcher = Dispatcher(bot)
@dispatcher.message_handler(commands=('start', 'help'))
async def send_help_message(message):
await message.reply(
'*NoteBot welcomes you!*\n\n'
'Forward me a message from a channel to save it as Evernote note. '
'Admit that you should grant access for me to be able to create'
'notes for you.\n\n'
'*Commands*:\n'
'\t/login - Login into Evernote',
parse_mode='Markdown'
)
When I’m trying to send bot a /help message, I’m getting such error:
INFO: 91.108.6.40:0 - "POST /updates/ HTTP/1.1" 500 Internal Server Error
ERROR: Exception in ASGI application
Traceback (most recent call last):
File "/home/vitaliy/.cache/pypoetry/virtualenvs/telegram-evernote-bot-IC7bT7Nj-py3.8/lib/python3.8/site-packages/uvicorn/protocols/http/httptools_impl.py", line 385, in run_asgi
result = await app(self.scope, self.receive, self.send)
File "/home/vitaliy/.cache/pypoetry/virtualenvs/telegram-evernote-bot-IC7bT7Nj-py3.8/lib/python3.8/site-packages/uvicorn/middleware/proxy_headers.py", line 45, in __call__
return await self.app(scope, receive, send)
File "/home/vitaliy/.cache/pypoetry/virtualenvs/telegram-evernote-bot-IC7bT7Nj-py3.8/lib/python3.8/site-packages/starlette/applications.py", line 102, in __call__
await self.middleware_stack(scope, receive, send)
File "/home/vitaliy/.cache/pypoetry/virtualenvs/telegram-evernote-bot-IC7bT7Nj-py3.8/lib/python3.8/site-packages/starlette/middleware/errors.py", line 181, in __call__
raise exc from None
File "/home/vitaliy/.cache/pypoetry/virtualenvs/telegram-evernote-bot-IC7bT7Nj-py3.8/lib/python3.8/site-packages/starlette/middleware/errors.py", line 159, in __call__
await self.app(scope, receive, _send)
File "/home/vitaliy/.cache/pypoetry/virtualenvs/telegram-evernote-bot-IC7bT7Nj-py3.8/lib/python3.8/site-packages/starlette/exceptions.py", line 82, in __call__
raise exc from None
File "/home/vitaliy/.cache/pypoetry/virtualenvs/telegram-evernote-bot-IC7bT7Nj-py3.8/lib/python3.8/site-packages/starlette/exceptions.py", line 71, in __call__
await self.app(scope, receive, sender)
File "/home/vitaliy/.cache/pypoetry/virtualenvs/telegram-evernote-bot-IC7bT7Nj-py3.8/lib/python3.8/site-packages/starlette/routing.py", line 550, in __call__
await route.handle(scope, receive, send)
File "/home/vitaliy/.cache/pypoetry/virtualenvs/telegram-evernote-bot-IC7bT7Nj-py3.8/lib/python3.8/site-packages/starlette/routing.py", line 227, in handle
await self.app(scope, receive, send)
File "/home/vitaliy/.cache/pypoetry/virtualenvs/telegram-evernote-bot-IC7bT7Nj-py3.8/lib/python3.8/site-packages/starlette/endpoints.py", line 30, in dispatch
response = await handler(request)
File "/home/vitaliy/coding/telegram-evernote-bot/src/views.py", line 57, in post
await process_update(update_data)
File "/home/vitaliy/coding/telegram-evernote-bot/src/services/updates.py", line 13, in process_update
return await dispatcher.process_update(update)
File "/home/vitaliy/.cache/pypoetry/virtualenvs/telegram-evernote-bot-IC7bT7Nj-py3.8/lib/python3.8/site-packages/aiogram/dispatcher/dispatcher.py", line 214, in process_update
return await self.message_handlers.notify(update.message)
File "/home/vitaliy/.cache/pypoetry/virtualenvs/telegram-evernote-bot-IC7bT7Nj-py3.8/lib/python3.8/site-packages/aiogram/dispatcher/handler.py", line 117, in notify
response = await handler_obj.handler(*args, **partial_data)
File "/home/vitaliy/coding/telegram-evernote-bot/src/bot.py", line 21, in send_help_message
await message.reply(
File "/home/vitaliy/.cache/pypoetry/virtualenvs/telegram-evernote-bot-IC7bT7Nj-py3.8/lib/python3.8/site-packages/aiogram/types/message.py", line 995, in reply
return await self.bot.send_message(
File "/home/vitaliy/.cache/pypoetry/virtualenvs/telegram-evernote-bot-IC7bT7Nj-py3.8/lib/python3.8/site-packages/aiogram/bot/bot.py", line 219, in send_message
result = await self.request(api.Methods.SEND_MESSAGE, payload)
File "/home/vitaliy/.cache/pypoetry/virtualenvs/telegram-evernote-bot-IC7bT7Nj-py3.8/lib/python3.8/site-packages/aiogram/bot/base.py", line 201, in request
return await api.make_request(self.session, self.__token, method, data, files,
File "/home/vitaliy/.cache/pypoetry/virtualenvs/telegram-evernote-bot-IC7bT7Nj-py3.8/lib/python3.8/site-packages/aiogram/bot/api.py", line 103, in make_request
async with session.post(url, data=req, **kwargs) as response:
File "/home/vitaliy/.cache/pypoetry/virtualenvs/telegram-evernote-bot-IC7bT7Nj-py3.8/lib/python3.8/site-packages/aiohttp/client.py", line 1012, in __aenter__
self._resp = await self._coro
File "/home/vitaliy/.cache/pypoetry/virtualenvs/telegram-evernote-bot-IC7bT7Nj-py3.8/lib/python3.8/site-packages/aiohttp/client.py", line 426, in _request
with timer:
File "/home/vitaliy/.cache/pypoetry/virtualenvs/telegram-evernote-bot-IC7bT7Nj-py3.8/lib/python3.8/site-packages/aiohttp/helpers.py", line 579, in __enter__
raise RuntimeError('Timeout context manager should be used '
RuntimeError: Timeout context manager should be used inside a task
Is there any way I can fix this? The thing I want to do is to get update from telegram api -> process it asynchronious with aiogram’s bot -> send user a message.
Is there any way I can deal with it or should I use starlette and telegram bot separately (that is not prefered, as I have some other endpoints to same telegram user/chat data into my mongoDB).
Issue Analytics
- State:
- Created 3 years ago
- Comments:10 (6 by maintainers)

Top Related StackOverflow Question
Yeah, that’s what I thought about. You’re using uvloop (uvicorn’s dependency). It’s known (but not yet properly reported) bug with aiohttp, uvloop and Python 3.7+
ref: MagicStack/uvloop#274
@uwinx it does work, but not with timers (at least in aiogram, IDK why) By saying “it doesn’t work” I mean timers (see traceback, @vitaliy-diachkov is not the only one who faces this, at least me too)
Don’t close it as it is still a bug in aiogram