2011-12-27 16 views
6

Aşağıdaki kod esasen kediler select.select sahip bir dosya(): Ben de o epoll okudumselect.select() neden disk dosyaları ile çalışır, ancak epoll()?

self._impl.register(fd, events | self.ERROR) 
IOError: [Errno 1] Operation not permitted 

: Ben epoll benzer bir şey çalıştığınızda

f = open('node.py') 
fd = f.fileno() 
while True: 
    r, w, e = select.select([fd], [], []) 
    print '>', repr(os.read(fd, 10)) 
    time.sleep(1) 

bir hata alıyorum disk dosyalarını desteklemez - veya belki de anlamlı değildir.

Epoll on regular files

Ama neden sonra() desteği disk dosyaları seçer? Selectmodule.c'deki uygulamaya baktım ve sadece işletim sistemine geçiyor gibi görünüyor, yani Python herhangi bir özel destek eklemiyor.

Daha yüksek bir düzeyde, blok olmayan bir sunucuda statik dosyalar sunmanın en iyi yolunu deniyorum. Sanırım diskten okuyan ve veriyi soketlere yazılan ana olay döngüsü iş parçacığına ileten G/Ç konuları oluşturmayı deneyeceğim.

cevap

7

select, düzenli dosyaların izlenmesini isteyen dosya tanıtıcılarına izin verir, ancak her zaman bir dosyayı okunabilir/yazılabilir olarak bildirir (yani, bir okuma/yazma işleminin gerçekten engellenip engellenmeyeceğini belirtmediği için biraz yararsızdır). o bir mekanizması yoktur olarak

epoll sadece (linux üzerinde en az) mevcuttur anlatmak için, düzenli dosyaların izlenmesi izin vermiyor engeller düzenli dosya yazma/okuma olsun

+0

Ah Tamam, benim os.read() çağırmak Seçim döngüsü o zaman engelleniyor. mantıklı. –

+0

@ user1117755 Evet, sabit sürücüyü beklemek zorundaysa engelleniyor. – nos

İlgili konular