Python Socket recv()立即返回

Python Socket recv()立即返回,python,django,python-3.x,Python,Django,Python 3.x,我正在编写一个程序,在Django数据库中保存一个新对象后,我需要连接到另一台服务器以发送和接收一些数据。我已经用这个功能扩展了模型中的save函数,但是我看到了一些意想不到的行为。具体来说,套接字recv立即返回,这对我来说是意外的,因为我创建了一个阻塞套接字而不是非阻塞套接字。 我希望我的代码等待recv调用上的数据。有人能解释这种行为吗 我的保存功能如下所示: def保存(self,*args,**kwargs): self.logger.info('正在尝试保存!') 超级(SpaDev

我正在编写一个程序,在Django数据库中保存一个新对象后,我需要连接到另一台服务器以发送和接收一些数据。我已经用这个功能扩展了模型中的save函数,但是我看到了一些意想不到的行为。具体来说,套接字recv立即返回,这对我来说是意外的,因为我创建了一个阻塞套接字而不是非阻塞套接字。 我希望我的代码等待recv调用上的数据。有人能解释这种行为吗

我的保存功能如下所示:

def保存(self,*args,**kwargs):
self.logger.info('正在尝试保存!')
超级(SpaDevice,self).保存(*args,**kwargs)
如果self.operation==3或self.operation==4:
通过
#处理服务的签入
elif self.operation==8:
#办理登记
#sock=socket.create_连接(('localhost',45309),超时=60)
sock=socket.create_连接(('localhost',45309))
data={“unique_id”:self.dev_id,“请求类型”:“签入”}
尝试:
self.logger.info('试图注册{0}'。格式(self.dev_id))
bytes\u send=sock.send(json.dumps(data.encode())
如果发送的字节数>0:
尽管如此:
数据=sock.recv(1024)
如果数据==b“”:
#空数据?为什么?再试一次
持续
elif数据为无:
#对方关闭了我们的连接,多么粗鲁!
self.logger.error('另一侧关闭连接,多么粗鲁')
打破
其他:
self.logger.info('received:{0}'。格式(data.decode())
打破
其他:
self.logger.error('未能将数据发送到gcmgw')
最后:
sock.close()

我不明白为什么会这样;有人能解释一下这种行为吗

好吧,我知道发生了什么。服务器关闭了我的连接,导致recv调用立即返回。在这种情况下,它不会返回None,而是返回一个空字节对象

一条线鲨的踪迹很快就表明了这一点