我正在编写一个脚本,它打开一个文本文件并循环遍历每一行(每行之间暂停几秒钟)。对于每一行,它都会打开一个瞬态客户端套接字连接并将文本发送到主机服务器。主机响应可能会或可能不会出现;无论哪种方式都没关系。
我已经遇到了 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) 是否有更直接的方法来确保在我完成后消除每个实例?