2015-04-06 96 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:检查!