Python报错:ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。
环境:windows
语言:python
故障:ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接
详细背景:python,threading,多线程里建立tcp链接。虚拟tcp服务器工具:“TCP-UDP服务管理V3.02”
前言:2020年4月23日23:16:10 最近在学习python 多线程。线程里面涉及到tcp。100个线程,没问题。1000个,就报错了10061了。先百度了一边。都说“权限不够”,让去将局域网设置修改为“自动配置-自动检测设置”。作为老手,顺便就百度了自动和手动有啥区别。原来就是自动获取ip和手动设置ip的区别。作为老油条,我当然选择“手动”。
所以问题不在这里。加上100个线程创建tcp可以。分析到可能是线程创建过快,创建完毕即start(),然后就开始connect(),tcp服务器虚拟工具处理不过来,前一个线程还没connect处理好,后一个线程就开始connect过来了。于是就报错了。大部分原因,应该是这个工具“TCP-UDP服务管理V3.02”处理要建立链接还要进行一个界面控件的可视化列表显示,造成处理延时了。
解决方法:
thread = threading.Thread(target = single_thread_job, name = ("Thread_num = %3d :"% i), args= (i, )) #threading的三个参数。函数名,线程名,元祖参数
time.sleep(0.1) #创建之后延迟100ms执行start() 延迟即是本问题解决方案
thread.start() #启动线程
i = i + 1
实测可行。
原因分析:服务器处理速度跟不上客户端的链接和请求速度。需要优化服务端的瓶颈(如资源、连接池数、限制rps,设置qps阈值,其余不处理等)或者,也可以调低客户端的请求频次(如示例中,sleep(0.1))