记一次python Socket 引起的内存增加

用python写一客户端,一开始代码:

def tcp_connect():
    while True:
        try:
            sock = socket.socket()
            sock.connect(addr)
            logger.info('tcp connected!')
            return sock
        except:
            time.sleep(1)
            continue

如果客户端连接不到服务器,这样会造成内存一直增加,gc不会回收socket对象。

以下代码能够回收:

def tcp_connect():
    while True:
        try:
            sock = socket.socket()
            sock.connect(addr)
            logger.info('tcp connected!')
            return sock
        except:
            sock.close()
            time.sleep(1)
            continue

不关闭socket不会回收,即使引用计数为0.


下面代码会更好:

def tcp_connect():
    sock = socket.socket() 
    while True:
        try:
            sock.connect(addr)
            logger.info('tcp connected!')
            return sock
        except:
            time.sleep(1)
            continue

猜你喜欢

转载自blog.csdn.net/up1012/article/details/81066207