1

我正在尝试创建一个与 Telegram 通信的网络应用程序。并尝试将SanicWeb 框架与Telepot. 两者都有asyncio基础。现在我遇到了一个非常奇怪的错误。

这是我的代码:

import datetime
import telepot.aio
from sanic import Sanic

app = Sanic(__name__, load_env=False)
app.config.LOGO = ''

@app.listener('before_server_start')
async def server_init(app, loop):
    app.bot = telepot.aio.Bot('anything', loop=loop)

    # here we fall
    await app.bot.sendMessage(
        "@test",
        "Wao! {}".format(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'),)
    )

if __name__ == "__main__":
    app.run(
        debug=True
    )

我得到的错误是:

[2018-01-18 22:41:43 +0200] [10996] [ERROR] Experienced exception while trying to serve
Traceback (most recent call last):
  File "/home/mk/Dev/project/venv/lib/python3.6/site-packages/sanic/app.py", line 646, in run
    serve(**server_settings)
  File "/home/mk/Dev/project/venv/lib/python3.6/site-packages/sanic/server.py", line 588, in serve
    trigger_events(before_start, loop)
  File "/home/mk/Dev/project/venv/lib/python3.6/site-packages/sanic/server.py", line 496, in trigger_events
    loop.run_until_complete(result)
  File "uvloop/loop.pyx", line 1364, in uvloop.loop.Loop.run_until_complete
  File "/home/mk/Dev/project/sanic-telepot.py", line 14, in server_init
    "Wao! {}".format(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'),)
  File "/usr/lib/python3.6/asyncio/coroutines.py", line 109, in __next__
    return self.gen.send(None)
  File "/home/mk/Dev/project/venv/lib/python3.6/site-packages/telepot/aio/__init__.py", line 100, in sendMessage
    return await self._api_request('sendMessage', _rectify(p))
  File "/usr/lib/python3.6/asyncio/coroutines.py", line 109, in __next__
    return self.gen.send(None)
  File "/home/mk/Dev/project/venv/lib/python3.6/site-packages/telepot/aio/__init__.py", line 78, in _api_request
    return await api.request((self._token, method, params, files), **kwargs)
  File "/usr/lib/python3.6/asyncio/coroutines.py", line 109, in __next__
    return self.gen.send(None)
  File "/home/mk/Dev/project/venv/lib/python3.6/site-packages/telepot/aio/api.py", line 139, in request
    async with fn(*args, **kwargs) as r:
  File "/home/mk/Dev/project/venv/lib/python3.6/site-packages/aiohttp/client.py", line 690, in __aenter__
    self._resp = yield from self._coro
  File "/home/mk/Dev/project/venv/lib/python3.6/site-packages/aiohttp/client.py", line 221, in _request
    with timer:
  File "/home/mk/Dev/project/venv/lib/python3.6/site-packages/aiohttp/helpers.py", line 712, in __enter__
    raise RuntimeError('Timeout context manager should be used '
RuntimeError: Timeout context manager should be used inside a task

Telepotinsideaiohttp用作依赖项和 HTTP 调用。如果我只使用aiohttp.web.

我不确定这个问题与哪个项目有关。redis此外,我以相同方法连接的所有其他依赖项(例如,数据库连接)都运行良好。

任何建议如何解决它?

4

0 回答 0