【python】Resource temporarily unavailable

原本python中多进程程序跑得挺好的,后来加了一部分代码,结果在运行到

lock = multiprocessing.Manager().Lock()

这一行时报出了如下错误:

[0]Exception: [Errno 11] Resource temporarily unavailable

在确定没有更改multiprocessing这一模块代码的情况后,初步判定要么是系统出异常了(很明显系统一般不会出问题),要么就是新加入的代码有问题。但是新录入的代码已经通过单元测试了啊,苦思无果之后,一步步的注释新代码。最后竟然发现是socket.setdefaulttimeout这个语句引起的错误。注释掉它之后就正常运行了。

原来是multiprocess模块与内置模块会有冲突,详细参考:http://erhuabushuo.is-programmer.com/?page=6

问题类似参考:http://stackoverflow.com/questions/6645851/multiprocessing-manager-rlock-error


这个错误信息 `Read failed: Resource temporarily unavailable` 通常表示程序在尝试读取某个资源(如文件、网络连接或套接字)时,由于资源暂时不可用而失败。这种情况可能由多种原因引起,以下是一些常见原因和解决方法: --- ### 常见原因: 1. **资源耗尽**: - 系统资源(如文件描述符、内存)耗尽,导致无法分配新的资源。 - 解决方法:检查系统资源使用情况(如 `ulimit -n` 查看文件描述符限制),关闭不必要的资源。 2. **并发冲突**: - 多个进程或线程同时访问同一资源,导致资源被锁定或占用。 - 解决方法:确保资源访问的同步性(如使用锁机制),或检查是否有其他程序占用了资源。 3. **网络问题**: - 如果是网络套接字(如Socket)读取失败,可能是网络连接不稳定或对方未及时响应。 - 解决方法:检查网络连接状态,重试操作或增加超时机制。 4. **非阻塞模式**: - 如果资源(如套接字)设置为非阻塞模式,而当前没有数据可读,会返回此错误。 - 解决方法:检查资源是否设置为非阻塞模式,或改用阻塞模式。 5. **文件权限或路径问题**: - 文件路径错误或权限不足,导致无法读取。 - 解决方法:检查文件路径和权限,确保程序有权限访问资源。 --- ### 调试建议: 1. **检查错误上下文**: - 查看完整的错误堆栈,确定是哪一行代码触发了错误。 - 例如:如果是文件读取失败,检查文件路径是否正确;如果是网络套接字,检查连接状态。 2. **日志和重试机制**: - 添加日志记录,记录资源访问的详细信息。 - 对可能失败的操作实现重试逻辑(如指数退避重试)。 3. **系统监控**: - 使用工具(如 `lsof`、`netstat`)检查资源占用情况。 - 监控系统资源使用(CPU、内存、文件描述符等)。 --- ### 示例代码(Python文件读取): 如果是文件读取失败,可以这样处理: ```python try: with open("example.txt", "r") as file: data = file.read() except IOError as e: print(f"读取文件失败: {e}") # 可添加重试逻辑或退出 ``` --- ### 示例代码(Socket读取): 如果是网络套接字读取失败: ```python import socket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.setblocking(False) # 非阻塞模式 try: data = sock.recv(1024) except BlockingIOError: print("资源暂时不可用,稍后重试") # 可添加等待或切换任务逻辑 ``` --- ### 总结: `Resource temporarily unavailable` 通常是资源竞争或系统限制导致的临时性问题。解决方法包括: 1. 检查资源是否被正确配置(如阻塞/非阻塞模式)。 2. 确保系统资源充足(如文件描述符、内存)。 3. 添加错误处理和重试机制。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值