当前位置: 首页 > news >正文

python 由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作

        最近在用python完成项目上的一些小需求,我也是个Python新手,过程中遇到了一些问题,我把印象比较深的记录下来,希望能帮助到其他伙伴。
        我用的是python 3.9.4, 我在centos上跑代码,也在windows上跑代码,这个问题是在windows上遇到的。我用的是windows10,我的场景是用python多线程向一个地址发送http请求获取数据,代码跑一会儿就会报错"由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作"。
在这里插入图片描述
         遇到这个问题的时候,我怀疑是python用的姿势不对,有一些资源没有关闭,然后我就一顿百度,我发现大家都在说可能是windows最大可用端口号的问题,windows最大可用端口号是5000,如果超过5000就会报这个错误。
         同时我也查了一下python,我用的是urllib库和requests库,网上说python会自动释放资源,不需要干预。
         本着听人劝吃饱饭的原则,我按照网上的说法修改了一下最大可用端口号,我是这样操作的

  1. 打开注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters。
  2. 建一个DWORD项,名字为MaxUserPort,值为十进制65534(十六进制0000FFFE),表示最大可用端口为65534。
  3. 建一个DWORD项,名字为TCPTimedWaitDelay,值为十进制30(十六进制0000001e),表示TCP连接等待时间30秒。

         改完之后我试了下,发现还是不好用,难道是我改的姿势不对!
         我一顿查,最后找到了windows的老家,windows官方操作方法最后一条是这么说的

Exit Registry Editor, and then restart the computer.

        哦,原来是我没重启电脑!我一阵兴奋,马上重启了一把,发现还是不好用。操作都是按照官方手册来的,为什么还是不好用呢!

        我仔细思考了一下,我认为还是因为python使用的姿势不对,我重新把代码跑起来,在报错的时候,我使用这个命令查询了一下在windows上有多少个tcp链接,不查不知道,一查吓一跳,有1万多个。我使用的命令如下:

netstat -an | find /C “TCP”

        那么问题很明显了,就是因为有资源没有关闭,可能是我python姿势不对,亦或是在大并发请求或者多线程或者一些我不知道的原因下,导致python的资源管理有某些问题。
        我做了如下两个操作后,在跑代码就不会报错了,netstat查询出来的TCP链接维持在300上下。
        第一个操作是使用session复用tcp链接

session = requests.Session()
response = session.get(url)

        第二个是获取response.text之后,调用了关闭方法

response.close()

上文说的windows官方对最大可用端口号的说明在这: windows官方最大可用端口号说明
netstat的命令总结在这 windows命令总结
python常用的命令总结 python常用命令
另外我还有一些linux下常用的命令总结:linux常用命令

我会不时更新这些命令


http://www.mrgr.cn/news/71909.html

相关文章:

  • 流形与对抗性样本本质的关系
  • MySQL中索引全详解
  • Linux ASLR
  • 【尚筹网】二、环境搭建一
  • 排序算法(四)--快速排序
  • 【Spring Boot】用 MyBatis 实现数据的 CRUD
  • 政务数据治理专栏开搞!
  • 时间空间频域融合的Corssformer时间序列预测项目
  • Fortran安装(vscode+gcc+Python)
  • Django Form
  • JVM——类加载器、类加载器的分类
  • 专题十八_动态规划_斐波那契数列模型_路径问题_算法专题详细总结
  • 2024134读书笔记|《花间集》——云解有情花解语,山月不知心里事, 水风空落眼前花
  • SpringBoot如何集成WebSocket
  • RT-DETR融合NeurIPS[2022]Ghost Module v2模块
  • C#-命名空间
  • 【FFmpeg】FFmpeg 函数简介 ③ ( 编解码相关函数 | FFmpeg 源码地址 | FFmpeg 解码器相关 结构体 和 函数 )
  • (一)- DRM架构
  • 【364】基于springboot的高校科研信息管理系统
  • WSL2 中大模型环境一步到位!(wsl --update 不好使/wsl2安装/python环境)
  • springboot基于Java的小区物业智能卡管理的设计与实现,计算机毕业设计项目源码311,计算机毕设程序(LW+开题报告、中期报告、任务书等全套方案)
  • 「 审稿答复 」如何写Response评论回复的“第一句”
  • 抖音电商发布双11数据:275个品牌通过直播带货实现成交额过亿元
  • Hyper-v中ubuntu与windows文件共享
  • keras实现道路裂缝检测
  • DHCP和FTP