6
$ python
Python 2.7.5 (default, Aug 25 2013, 00:04:04) 
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import select
>>> select.poll
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'poll'
4

3 回答 3

7

在 OSX 上使用 select.kqueue() 而不是使用 poll。它类似于 Linux 上的“epoll”,因为您可以更有效地注册可用于异步代码的文件描述符/文件系统事件类型。比轮询效率高得多。

否则,等价的只是在一段时间内运行一个阻塞 select.select() 真:有某种超时的循环?

于 2013-11-02T09:16:35.723 回答
1

如果你想使用 poll 以便不为 kqueue 重写一堆代码,它内置在从 macports (macports.org) 编译的 python 中。您只需明确指定该 python 实例(在我的情况下为 /opt/local/bin/python2.7),因为 OSX 的 python (/usr/bin/python) 默认情况下位于搜索路径的较早位置。

于 2014-03-28T18:50:25.727 回答
1

有趣的是,为了将来参考,这只提供了 python 版本的有限子集

user@hostname:~/ws/engine$ python
Python 2.7.9 (v2.7.9:648dcafa7e5f, Dec 10 2014, 10:10:46) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import select
>>> select.poll()
<select.poll object at 0x102415cc0>
>>> exit()
user@hostname:~/ws/engine$ python --version
Python 2.7.9
user@hostname:~/ws/engine$ workon py_2_7_10
(py_2_7_10) user@hostname:~/ws/engine$ python
Python 2.7.10 (default, Oct 23 2015, 19:19:21) 
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import select
>>> select.poll()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'poll'
>>> 

~/ws/engine$ uname -a
Darwin hostname 15.4.0 Darwin Kernel Version 15.4.0: Fri Feb 26 22:08:05 PST 2016; root:xnu-3248.40.184~3/RELEASE_X86_64 x86_64
于 2016-08-03T20:46:35.507 回答