python多线程操作报错:No handlers could be found for logger "websocket"

来源:互联网 发布:什么是云计算 通俗 编辑:程序博客网 时间:2024/05/16 06:24

用python模拟对讲机在线工具,在服务器上成功连接的连接上限是1020个,需要确定遇到这个瓶颈的原因
1.连接失败时的报错信息为
No handlers could be found for logger "websocket"

解决方法:
import logging
logging.basicConfig()

2.上述问题修正后获得的具体报错信息如下:
ERROR:websocket:error from callback <bound method pressure_webSocket.on_error of <lib.protocol.pressure_webSocket instance at 0x7f9b4415a248>>: cannot concatenate 'str' and 'exceptions.ValueError' objects

解决方法:websocket的回调处理函数中错误数据没有转化为字符串就做了连接,需要在错误数据
def on_error(self,ws,error):
    log.error(error)
跟正为:
def on_error(self,ws,error):
    log.error(str(error))

3.在websocket的回调中增加对异常数据的处理纠正之后,程序的报错信息如下:
Error#  filedescriptor out of range in select()

报错原因:python的socket模块调用了select模块的源代码,而执行select调用的时候,传入了大于1024的fd就会导致上面的错误

4.大量使用短链接,所以导致单进程的 fd 个数升高,超出了 1024 限制,出现了最开始的异常

解决方法:
(1)因为这个值是定义在内核里面,所以如果在维持目前方案不变的前提下,解决这个问题就需要重新编译 Linux-kernel,将这个值提高
(2)修改 stpclient 的客户端,使用epoll,代替比较老旧的 select,当时使用 select 的原因是,fd 个数很少,性能上没有问题,同时 select 在其他平台上也可以得到支持
0 0
原创粉丝点击