テキスト ファイルを開き、各行をループするスクリプトを作成しています (各行の間に数秒の一時停止があります)。行ごとに、一時的なクライアント ソケット接続を開き、テキストをホスト サーバーに送信します。ホストの応答が来る場合と来ない場合があります。どちらでも構いません。
既存のソケット オブジェクトに再接続できないという Python ソケットの制限に既に遭遇しました (再接続すると例外が発生するためEBADF, 'Bad file descriptor')。そのため、一時的な接続ごとに新しいソケット インスタンスを作成しています。もちろん、秘訣はメモリリークを回避する方法になります。
私がこれにアプローチした方法は、ソケットの作成、使用、およびクローズのすべての部分を関数にプッシュすることです。Python のガベージ コレクションを利用して、処理が終わった後に各インスタンスを削除します。
ソケットのインポート、選択、時間
def transientConnect (ホスト、ポート、sendData):
応答 = ''
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 の行:
応答 = transientConnect(serverHost,serverPort,line)
印刷(応答)
時間.スリープ(3.0)
私の質問: (1) このアプローチは、メモリ リークを回避するために機能しますか? (2) 終了後に各インスタンスが確実に削除されるようにする、より直接的な方法はありますか?