And*_*y C 7 python unix select epoll
以下代码实际上是使用select.select()来获取文件:
f = open('node.py')
fd = f.fileno()
while True:
r, w, e = select.select([fd], [], [])
print '>', repr(os.read(fd, 10))
time.sleep(1)
Run Code Online (Sandbox Code Playgroud)
当我用epoll尝试类似的东西时,我收到一个错误:
self._impl.register(fd, events | self.ERROR)
IOError: [Errno 1] Operation not permitted
Run Code Online (Sandbox Code Playgroud)
我还读过epoll不支持磁盘文件 - 或者说它没有意义.
但是为什么select()会支持磁盘文件呢?我查看了selectmodule.c中的实现,它似乎只是进入操作系统,即Python没有添加任何特殊支持.
在更高的层次上,我正在尝试在非阻塞服务器中提供静态文件的最佳方法.我想我会尝试创建从磁盘读取的I/O线程,并将数据提供给写入套接字的主事件循环线程.
select允许监视指向常规文件的文件描述符,但它总是将文件报告为可读/可写(即它有点无用,因为它不会告诉您读/写是否会实际阻塞).
epoll只是不允许监视常规文件,因为它没有机制(至少在linux上)可用来判断读/写常规文件是否会阻塞
| 归档时间: |
|
| 查看次数: |
2857 次 |
| 最近记录: |