は私のコードです:実行時間(本当に遅い)
import socket
import time
mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
mysock.connect(('www.py4inf.com', 80))
mysock.send(b'GET /code/romeo.txt HTTP/1.1\n')
mysock.send(b'Host: www.py4inf.com\n\n')
all = b""
while True:
data = mysock.recv(512)
all = all + data
if len(data) < 1:
break
mysock.close()
stuff = all.decode()
position = stuff.find('\r\n\r\n')
print(stuff[position+4:])
それはwhileループでブレークを呼び出すために、ほぼ30秒かかりますので、何か問題があるに違いありません。 しかし、コードif len(data) < 1:
をif len(data) < 100:
に変更するとわずか0.5秒しかかかりませんでした。
助けてください。それはしばらく私を悩ましました。 サンプルWebサイト:
これは完璧な意味を持ちます。もちろん、非常に起こりそうもないものはずっと長くなる可能性があります。代わりに、自分が何をしようとしているのか自分に尋ねてください。あなたはいつソケットでリッスンを止めたいですか? –
この質問はここで多くの時間ここで議論されています(例:http://stackoverflow.com/questions/17667903/python-socket-receive-large-amount-of-data)。あなたのコードには何も問題はありません。これはソケットの仕組みです。 mysock.recv(512)は512バイトを待ちます。しばらくすると、接続は単に破棄されます。ノンブロッキングソケットのPythonドキュメントを見てください:https://docs.python.org/3/howto/sockets.html#non-blocking-sockets –
私はそれを手に入れます!上記のコードをlen(data)<100の場合に変更します。これは、mysock.recv(512)からの2回目の受信が偶然に100未満になるためです。そういうわけで、それは実行時間をそんなに減らすことができます。また、私はソケットに少し慣れているように、あなたのコメントを本当に感謝します。私はいつかあなた達と同じくらい良いことができることを願っています。 – JianWei