2015-04-06 39 views
0

在python的SocketServer.py代碼中,我找到下面的代碼。關於python select.select的返回值調用

r, w, e = _eintr_retry(select.select, [self], [], [], poll_interval) 
if self in r: 
    self._handle_request_noblock() 

上述if語句是否必要?由於只有「自我」被傳遞給選擇調用,我不希望其他文件描述符出現在返回的文件描述符列表中。

我問這個問題的原因是,我是否應該遵循上面的風格或類似以下的東西就足夠了?

r, w, e = select.select([self], [], [], poll_interval) 
if r: 
    ... 

回答

0
if r: 

是不一樣的

if self in r: 

您可以在select.select文檔閱讀:

空序列是允許的,但驗收三個空序列 是與平臺依賴。

[...]

返回值是一個三是準備好對象的列表:前三個參數的 子集。 當超時達到 沒有文件描述符準備就緒時,三個空列表是 返回

由於在該模塊中變量poll_interval正在傳遞給函數,因此返回空列表時可能會出現這種情況。一個空的列表將通過簡單的if r:檢查!