निम्नलिखित कोड अनिवार्य रूप से बिल्लियों() 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 में कार्यान्वयन को देखा और ऐसा लगता है कि यह ऑपरेटिंग सिस्टम के माध्यम से जा रहा है, यानी पायथन कोई विशेष समर्थन नहीं जोड़ रहा है।
उच्च स्तर पर मैं एक गैर-ब्लॉकिंग सर्वर में स्थिर फ़ाइलों को प्रस्तुत करने के सर्वोत्तम तरीके से प्रयोग कर रहा हूं। मुझे लगता है कि मैं I/O धागे बनाने की कोशिश करूंगा जो डिस्क और फ़ीड डेटा से मुख्य घटना लूप थ्रेड पर पढ़ते हैं जो सॉकेट को लिखता है।
आह ठीक है, तो मेरे os.read() में फोन चयन लूप तब अवरुद्ध है। समझ में आता है। –
@ user1117755 हां, अगर यह हार्ड ड्राइव की प्रतीक्षा कर रहा है तो यह अवरुद्ध हो रहा है। – nos