Python:停止socket-receiving-process

时间:2011-05-11 12:02:53

标签: python interrupt break recv

我通过socket-module从某些设备接收数据。 但过了一段时间后,设备停止发送包裹。 然后我想中断for循环。 虽然True不起作用,因为他收到了超过100个包裹。 我怎么能停止这个过程? s代表插座。

...
for i in range(packages100):
    data = s.recv(4)
    f.write(data)
...

编辑: 我认为socket.settimeout()是解决方案的一部分。也可以看看: How to set timeout on python's socket recv method?

2 个答案:

答案 0 :(得分:3)

如果你的对等方真的只是停止发送数据,而不是关闭连接,这很棘手,你将被迫从这个套接字中寻求异步读取。

将其置于异步模式(文档和Google是您的朋友),并尝试每次都读取它,而不是阻止读取。然后,您可以随时停止“尝试”。请注意,根据异步IO的性质,您的代码会有所不同 - 您将无法再假设一旦recv返回,它实际上会读取一些数据。

答案 1 :(得分:2)

while 1:
    data = conn.recv(4)
    if not data: break
    f.write(data)

此外,example in python docs