版本

python3.11版本,aioredis 2.0.1版本,redis 7.x版本

redis.conf配置文件

daemonize yes
bind 0.0.0.0
port 6379
protected-mode no

代码

from fastapi import FastAPI
import aioredis app = FastAPI() @app.on_event('startup')
async def startup_event():
# 线程池
app.state.redis_client = aioredis.from_url('redis://xxx.xxx.xxx.xx/0',encoding="utf-8", decode_responses=True) @app.on_event('shutdown')
async def shutdown_event():
await app.state.redis_client.close() @app.get('/index')
async def index():
key = 'liuwei'
# 设置缓存
await app.state.redis_client.set(key, '123456') # 读取
result = await app.state.redis_client.get(key)
print(result)
return {'msg': 'ok'} if __name__ == '__main__':
import uvicorn
uvicorn.run(app='main:app', host='0.0.0.0', port=8001, reload=True)

报错

File "f:\all_django_project\pyscript_demo\main.py", line 2, in <module>
import aioredis
File "F:\all_django_project\pyscript_demo\fast_api_env\Lib\site-packages\aioredis\__init__.py", line 1, in <module>
from aioredis.client import Redis, StrictRedis
File "F:\all_django_project\pyscript_demo\fast_api_env\Lib\site-packages\aioredis\client.py", line 32, in <module>
from aioredis.connection import (
File "F:\all_django_project\pyscript_demo\fast_api_env\Lib\site-packages\aioredis\connection.py", line 33, in <module>
from .exceptions import (
File "F:\all_django_project\pyscript_demo\fast_api_env\Lib\site-packages\aioredis\exceptions.py", line 14, in <module>
class TimeoutError(asyncio.TimeoutError, builtins.TimeoutError, RedisError):
TypeError: duplicate base class TimeoutError

定位分析

  File "F:\all_django_project\pyscript_demo\fast_api_env\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的错误
问了Copilot,说是兼容性问题,在 Python3.11 中,asyncio.TimeoutError 被移动到了 asyncio.exceptions 模块中,而 aioredis 库没有及时更新以适应这个变化。
所以我们找到aioredis目录下的exceptions.py文件,定位到14行代码
class TimeoutError(asyncio.TimeoutError, builtins.TimeoutError, RedisError):
pass 所以我们修改为如下代码,即可运行
class TimeoutError(asyncio.exceptions.TimeoutError, RedisError):
pass

异步aioredis连接时报错TypeError: duplicate base class TimeoutError问题的更多相关文章

  1. Ajax上传文件/照片时报错TypeError :Illegal invocation

    问题 Ajax上传文件/照片时报错TypeError :Illegal invocation 解决 网上搜索问题,错误原因可能有以下几个,依次检查: 请求类型有误,如post请求,但在后台设置的是ge ...

  2. 解决Win7、Win10登录远程桌面连接时报错、提示“要求的函数不受支持”问题

    解决Win7.Win10登录远程桌面连接时报错.提示"要求的函数不受支持"问题远程登录主机时地址,用户名,密码均正确,但是提示错误"要求的函数不受支持": 解决 ...

  3. 执行python manage.py makemigrations时报错TypeError: __init__() missing 1 required positional argument: 'on_delete'

    在执行python manage.py makemigrations时报错: TypeError: __init__() missing 1 required positional argument: ...

  4. Django :执行 python manage.py makemigrations 时报错 TypeError: __init__() missing 1 required positional argument: 'on_delete'

    原因 执行命令 python manage.py makemigrations 报错 TypeError: __init__() missing 1 required positional argum ...

  5. 使用JDBC获取Oracle连接时报错

    The Network Adapter could not establish the connection       网络适配器不能创建连接 作为初学者的来说,这个问题让我找了好多次,每次重新开启 ...

  6. mysql数据库打开连接时报错:1251

    考试之前由于一直在做团队项目导致疏忽了数据库 等到今天来连接做考试的时候发现报错:1251 网上的解释以及解决方法: 今天下了个 MySQL8.0,发现Navicat连接不上,总是报错1251: 原因 ...

  7. statsmodels.tsa.arima_model预测时报错TypeError: int() argument must be a string, a bytes-like object or a number, not 'Timestamp'

    在 python 中用 statsmodels创建 ARIMA 模型进行预测时间序列: import pandas as pd import statsmodels.api as sm df = pd ...

  8. MySQL使用Navicat远程连接时报错1251

    1.报错信息 client does not support authentication protocol requested by server:consider upgrading MySQL ...

  9. moviepy执行TextClip.search方法时报错TypeError: a bytes-like object is required, not str

    ☞ ░ 前往老猿Python博文目录 ░ 执行TextClip.search方法时,报错: >>> from moviepy.editor import * >>> ...

  10. Django关联数据库时报错TypeError: __init__() missing 1 required positional argument: 'on_delete'

    sgrade = models.ForeignKey("Grades",) 执行python manage.py makemigrations后出现TypeError: __ini ...

随机推荐

  1. 【转帖】Linux性能优化(四)——BCC性能监控工具

    一.BCC简介 1.BCC简介 BCC是一个Python库,简化了eBPF应用的开发过程,并收集了大量性能分析相关的eBPF应用.BCC为BPF开发提供了不同的前端支持,包括Python和Lua,实现 ...

  2. [转帖]Linux系统:page fault

    Linux进程如何访问内存 Linux下,进程并不是直接访问物理内存,而是通过内存管理单元(MMU)来访问内存资源,原因后面会讲到. 为什么需要虚拟内存地址空间 假设某个进程需要4MB的空间,内存假设 ...

  3. [转帖]Oracle 通过 Exadata 云基础设施 X9M 提供卓越的数据库性能和规模

    https://www.modb.pro/db/397202 32个节点的RAC 服务器 每个服务器 两个 64核心的AMD CPU 四个线程干管理 252个线程进行数据库处理 252*32=8064 ...

  4. Docker内JVM参数的简单学习

    Docker内JVM参数的简单学习 背景 公司内部有K8S的项目. 基于K8S内容器的JVM参数的设置与标准虚拟机运行不太一样. 产品内部的启动脚本有一个设置, 在内存大于16G的情况下 默认取内存总 ...

  5. 小程序跳转到h5页面无法获取参数

    在小程序中,遇见这样一个需求: 小程序(携带token)跳转到H5页面: 在H5端取token;将token作为参数: 然后返回来的信息, 这里遇见一个问题,在created中无法获取地址栏的参数: ...

  6. ABP-VNext 用户权限管理系统实战02---用户权限表的创建与迁移

    一.表实体建立 1.菜单表 [Comment("菜单表")] [Table("t_identity_menu")] public class Menu : Au ...

  7. 使用Navicat 进行MySql数据库同步功能

    使用Navicat 进行MySql数据库同步功能 作者:胡德安 准备: 打开Navicat管理工具(比如Navicat Premium 15管理工具) 两个数据库第一个是源数据库A和要被同步的目标数据 ...

  8. PLSQL Developer汉语设置

    PLSQLQ Developer是由Oracle公司推出的数据库开发工具,具有很好的移植性和适应性.但是当我们安装完成Oracle11g PLSQL Developer工具后发现状态栏的显示是英文,对 ...

  9. Python3.11.3解决ModuleNotFoundError: No module named 'Crypto'

    安装了Crypto但程序还提示 ModuleNotFoundError: No module named 'Crypto' 反复卸载安装都不行,最后修改了文件夹的名称解决了. 找到Python的安装路 ...

  10. 教你用JavaScript实现粘性导航

    案例介绍 欢迎来的我的小院,我是霍大侠,恭喜你今天又要进步一点点了!我们来用JavaScript编程实战案例,做一个粘性导航.移动页面导航仍在页面上方.通过实战我们将学会scrollY属性.offse ...