6
下面的代碼基本上與貓一個select.select文件():爲什麼select.select()可以使用磁盤文件但不使用epoll()?
f = open('node.py')
fd = f.fileno()
while True:
r, w, e = select.select([fd], [], [])
print '>', repr(os.read(fd, 10))
time.sleep(1)
當我試着使用epoll的類似的事情,我得到一個錯誤:
self._impl.register(fd, events | self.ERROR)
IOError: [Errno 1] Operation not permitted
我也讀到的epoll不支持磁盤文件 - 或者它沒有意義。
但爲什麼選擇()支持磁盤文件呢?我查看了selectmodule.c中的實現,它似乎只是進入了操作系統,即Python沒有增加任何特殊的支持。
在更高級別上,我正在試驗在非阻塞服務器中提供靜態文件的最佳方式。我想我會嘗試創建從磁盤讀取的I/O線程並將數據提供給寫入套接字的主事件循環線程。
啊OK,所以我os.read()調用那麼選擇循環就會阻塞。說得通。 – 2011-12-27 18:41:56
@ user1117755是的,如果它必須等待硬盤驅動器,它會阻止。 – nos 2011-12-27 22:55:32