我正在编写一个脚本,它打开一个文本文件并循环遍历每一行(每行之间暂停几秒钟)。对于每一行,它都会打开一个瞬态客户端套接字连接并将文本发送到主机服务器。主机响应可能会或可能不会出现;无论哪种方式都没关系。
我已经遇到了 Python 套接字限制,您无法重新连接现有的套接字对象(因为这样做会触发异常EBADF, 'Bad file descriptor'
)。所以我正在为每个瞬态连接创建一个新的套接字实例。那么诀窍当然就是如何避免内存泄漏。
我解决这个问题的方法是将创建、使用和关闭套接字的整个部分推送到一个函数——在我完成后依靠 Python 的垃圾收集来删除每个实例:
导入套接字,选择,时间 def 瞬态连接(主机、端口、发送数据): 响应 = '' sendSocket = socket.socket() sendSocket.connect((serverHost,serverPort)) sendSocket.send(线) gotData = select.select([sendSocket],[],[],2) if (gotData[0]):response = sendSocket.recv(65535) sendSocket.close() 返回响应 scriptLines = open('testScript.txt','r').readlines() 服务器主机 = '127.0.0.1' 服务器端口 = 15004 对于 scriptLines 中的行: 响应 = 瞬态连接(服务器主机、服务器端口、线路) 打印(响应) 时间.sleep(3.0)
我的问题:(1)这种方法可以避免任何内存泄漏吗?(2) 是否有更直接的方法来确保在我完成后消除每个实例?