2014-09-22 72 views
2

偶尔在套接字上发送/接收突发时,我的python App挂起。 缺少什么我在这里:似乎基本:导致挂起的Python套接字

skt.send(packet) 

skt.recv_into(pkt) 

如果将通话后睡眠(0.2),然后正常工作。

我应该改为select()与套接字对话的方式吗? 我试过2.7至3.3这似乎是更好的,但仍然会发生。

这个插座设置为:

skt = socket(AF_INET, SOCK_STREAM) 

skt.connect((ipAddress, nwPort)) 

回答

0

有远的信息太少告诉。我不认为这是一个挂起,而是因为数据尚未存在,所以当您读取数据时,可能会出现睡眠暂挂数据(您可以使用MSG_DONTWAIT或setblocking或其他检查如select进行禁用)。如果您知道它已发送,则可能出现各种网络延迟,特别是可以使用TCP_NODELAY禁用的Nagle's algorithm。如果您希望程序具有响应性,您通常应该使用select或poll - 请注意,对于像TCP这样的流协议,如果您不知道提前到达的确切大小,则需要将其与非阻塞行为相结合。