[32mINFO: Will watch for changes in these directories: [‘E:\\fastapi’]
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [23528] using StatReload
Process SpawnProcess-1:
Traceback (most recent call last):
File “D:\anaconda3\Lib\multiprocessing\process.py”, line 314, in _bootstrap
self.run()
File “D:\anaconda3\Lib\multiprocessing\process.py”, line 108, in run
self._target(*self._args, **self._kwargs)
File “D:\anaconda3\Lib\site-packages\uvicorn\_subprocess.py”, line 80, in subprocess_started
target(sockets=sockets)
File “D:\anaconda3\Lib\site-packages\uvicorn\server.py”, line 65, in run
return asyncio.run(self.serve(sockets=sockets))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “D:\anaconda3\Lib\asyncio\runners.py”, line 190, in run
return runner.run(main)
^^^^^^^^^^^^^^^^
File “D:\anaconda3\Lib\asyncio\runners.py”, line 118, in run
return self._loop.run_until_complete(task)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “D:\anaconda3\Lib\asyncio\base_events.py”, line 653, in run_until_complete
return future.result()
^^^^^^^^^^^^^^^
File “D:\anaconda3\Lib\site-packages\uvicorn\server.py”, line 69, in serve
await self._serve(sockets)
File “D:\anaconda3\Lib\site-packages\uvicorn\server.py”, line 76, in _serve
config.load()
File “D:\anaconda3\Lib\site-packages\uvicorn\config.py”, line 434, in load
self.loaded_app = import_from_string(self.app)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “D:\anaconda3\Lib\site-packages\uvicorn\importer.py”, line 19, in import_from_string
module = importlib.import_module(module_str)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “D:\anaconda3\Lib\importlib\__init__.py”, line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “<frozen importlib._bootstrap>”, line 1204, in _gcd_import
File “<frozen importlib._bootstrap>”, line 1176, in _find_and_load
File “<frozen importlib._bootstrap>”, line 1147, in _find_and_load_unlocked
File “<frozen importlib._bootstrap>”, line 690, in _load_unlocked
File “<frozen importlib._bootstrap_external>”, line 940, in exec_module
File “<frozen importlib._bootstrap>”, line 241, in _call_with_frames_removed
File “E:\fastapi\app\main.py”, line 3, in <module>
from .api.v1.routers import api_router
File “E:\fastapi\app\api\v1\routers.py”, line 2, in <module>
from .endpoints import chatbot, health
File “E:\fastapi\app\api\v1\endpoints\chatbot.py”, line 8, in <module>
from app.services.cache_service import get_cached_response, set_cached_response
File “E:\fastapi\app\services\cache_service.py”, line 1, in <module>
import aioredis
File “D:\anaconda3\Lib\site-packages\aioredis\__init__.py”, line 1, in <module>
from aioredis.client import Redis, StrictRedis
File “D:\anaconda3\Lib\site-packages\aioredis\client.py”, line 32, in <module>
from aioredis.connection import (
File “D:\anaconda3\Lib\site-packages\aioredis\connection.py”, line 33, in <module>
from .exceptions import (
File “D:\anaconda3\Lib\site-packages\aioredis\exceptions.py”, line 14, in <module>
class TimeoutError(asyncio.TimeoutError, builtins.TimeoutError, RedisError):
TypeError: duplicate base class TimeoutError

你遇到的报错是:

TypeError: duplicate base class TimeoutError

这是由于你当前使用的 aioredis 包版本存在问题。这个错误在新版 Python(如 3.11 或以上)上 使用旧版 aioredis 时会出现。

推荐方式(官方建议):

改用 redis 官方库 的异步方式,它已经集成了 asyncio 支持,并且取代了 aioredis

aioredis 已被废弃,功能已合并进 redis 官方库(即 pip install redis)。

替换步骤

1. 卸载 aioredis:

pip uninstall aioredis

2. 安装 redis(>= 4.2.0):

pip install redis

3. 修改你的代码:

import aioredis

替换为

import redis.asyncio as redis

r = redis.Redis(host=’localhost’, port=6379, db=1)

# 异步调用
await r.set(‘key’, ‘value’)
val = await r.get(‘key’)

作者 admin

百度广告效果展示