关于python select.select调用的返回值

时间:2015-04-06 15:18:08

标签: python linux sockets select

在python的SocketServer.py代码中,我找到了以下代码。

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

以上if语句是否必要?由于只有“self”被传递给select调用,我不希望其他文件描述符出现在返回的文件描述符列表中。

我问这个的原因是,我是否应该按照上述方式或类似下面的内容就够了?

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

1 个答案:

答案 0 :(得分:0)

if r:

不同
if self in r:

您可以阅读select.select文档:

  

允许空序列,但接受三个空序列   与平台有关。

     

[...]

     

返回值是准备好的对象列表的三倍:   前三个参数的子集。 达到超时时   如果没有文件描述符准备就绪,则会有三个空列表   返回

因为在模块中,变量poll_interval被传递给函数,所以可能会出现返回空列表的情况。空列表将通过简单的if r:检查!