2 回答

TA貢獻(xiàn)2037條經(jīng)驗(yàn) 獲得超6個(gè)贊
您調(diào)用它的方式 ( readers, writers, err = select([s], [s], [])
),如果它可讀或可寫,它會(huì)立即返回。但是你只檢查它是否可讀。
由于套接字在大多數(shù)情況下可能是可寫的,這正是您被告知的。
另一種可能性是在time.sleep(0.02)
某處添加一個(gè),例如,當(dāng)您在該循環(huán)中不執(zhí)行任何其他操作時(shí)。然后,20 毫秒的額外延遲不應(yīng)該受到傷害(但是,它并不干凈)。

TA貢獻(xiàn)2041條經(jīng)驗(yàn) 獲得超4個(gè)贊
select 最常見的用途是只考慮rlistandtimeout參數(shù)。對(duì)于您的示例代碼,它應(yīng)該是:
while True:
readers, writers, err = select([s], [], [])
if s in readers:
data = s.recv(1024)
print(data)
該wlist參數(shù)僅在應(yīng)用程序可能需要寫入大數(shù)據(jù)時(shí)使用。在這種情況下,要寫入套接字的數(shù)據(jù)只是排隊(duì),然后將套接字添加到wlist. 當(dāng)select返回并且有內(nèi)容要寫入套接字時(shí),程序會(huì)嘗試寫入,如果仍有內(nèi)容,它會(huì)再次推送到隊(duì)列中(注意:必須推送到頭部......)并且套接字留在wlist. 如果所有內(nèi)容都已寫入且隊(duì)列為空,則套接字將從wlist.
在上面的文本中,隊(duì)列可以是真正的雙端隊(duì)列,也可以是簡(jiǎn)單的bytes緩沖區(qū)或任何其他允許在兩端添加字節(jié)的容器。每個(gè)套接字應(yīng)該存在一個(gè)。
添加回答
舉報(bào)