모든 READ 이벤트를 무시하면서 EOL 이벤트를 얻는 데 사용할 수있는 트릭은 NOTE_LOWAT에 엄청나게 높은 값을 제공하여 모든 READ 이벤트를 억제하는 것입니다. ,
또한
Python 2.6.5 (r265:79063, Jul 17 2010, 22:57:01)
[GCC 4.2.1 20070719 [FreeBSD]] on freebsd8
Type "help", "copyright", "credits" or "license" for more information.
>>> import select
>>> import socket
>>> import sys
>>> a, b = socket.socketpair()
>>> kq = select.kqueue()
>>> kq.control([select.kevent(a, select.KQ_FILTER_READ, select.KQ_EV_ADD, select.KQ_NOTE_LOWAT, sys.maxint)], 0)
[]
>>> b.send('abc')
3
>>> kq.control(None, 10) # Interrupt after some time.
^CTraceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyboardInterrupt
>>> b.close()
>>> kq.control(None, 10) # Immediate return.
[<select.kevent ident=3 filter=-1 flags=0x8000 fflags=0x0 data=0x3 udata=0x0>]
>>>
이 같은 것은 FreeBSD의에 같은 예외적 인 상태가없는 man 2 select
인용 :
유일한 예외 조건 감지를
여기 예를 들어 파이썬 REPL에서 이렇게이다 소켓에서받은 대역 외 데이터 입니다.
kqueue 개체를 반복 할 경우 어떻게해야합니까? – solti
나는 epoll을 사용하는 프로그램을 가지고 있으며 kqueue로 변환하려고합니다. 나는 당신의 모범을 보았습니다. 나는 대부분을 이해했지만 kq.control (None, 10)이 혼란스러워졌습니다. – solti
변경 목록은 kevent 객체의 반복 가능 또는 없음이어야합니다. 내가 말할 수있는 것은 반복 가능한 kevent 객체이다. – solti