Pythonソケットプログラミングに関する質問があります。私はかなりソケットの新しいと、おそらくちょうど彼らがどのように動作するのかをよく理解していない。私は、Pythonアプリケーションを実行している間に2つのマシン間でバイナリファイルを転送する必要があり、いくつかのソケットプログラミングを行うことは、システムコマンドscpまたはnetcatを実行するよりも速く/速くなると考えました。しかし何らかの理由で、私のマシン間で1GBイメージを転送すると14秒かかります。もし私がSCP経由でそれをしたら、それは約9時間しかかかりません。SCPは悪く遅いので、これは奇妙に思えます。転送速度がnetcatに匹敵することを望んでいましたが、これを達成するのに問題があります。遅いPythonソケット転送
サーバー:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((socket.gethostname(), 50000))
s.listen(1)
img = open('test.img', 'rb')
client, addr = s.accept()
l = img.read(4096)
while(l):
client.send(l)
l = img.read(4096)
img.close()
s.close()
クライアント:
host = ''
port = 50000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
img = open('./newimg.img', 'wb')
l = s.recv(4096)
while(l):
img.write(l)
l = s.recv(4096)
img.close()
s.close()
これは明らかに、非常に基本的で、機能や例外処理の多くを欠いているが、それは、少なくとも(ゆっくりけれども)を転送するファイルを取得します。私は明らかに 'ホスト'変数のような私のコードからいくつかの詳細を削除しました。
これを改善するにはどうすればよいですか?
ありがとうございます!
時間でより多くのバイトがTCP_NODELAYを設定してみ受けるようs.recvのバッファサイズ()拡大してください。 send/recvで問題が発生した場合は、少し助けてください。 – Arnial