2014-09-22 73 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這樣的流協議,如果您不知道提前到達的確切大小,則需要將其與非阻塞行爲相結合。