我想程序從龍捲風轉換爲ASYNCIO的第一步是使用實際ASYNCIO事件循環作爲described here。使用Python ASYNCIO等待GPIO中斷
此應用程序在嵌入式Linux機器上運行,我使用通過sysfs/gpio subsystem的GPIO以及我正在等待中斷的某些GPIO。我能直接在此整合到龍捲風IOLoop做:
# Register with the queue
self.io_loop.add_handler(
self.gpio._value_file, self._handle_interrupt, self.io_loop._EPOLLPRI | self.io_loop.ERROR
)
在代碼塊,_value_file
是文件句柄的GPIO可以讀取該文件。只要該GPIO上的中斷可用,事件EPOLLPRI就會被觸發。在龍捲風,這工作得很好。它會在中斷到來後立即調用_handle_interrupt
函數。
我的問題是,我一直沒能到這個轉換爲本地ASYNCIO事件循環。在the documentation for watching file descriptors我只找到函數來添加讀者和作家,但沒有什麼可以觀察文件描述符上的通用事件掩碼。我不能深入到代碼自從進入。然而,看着龍捲風層從龍捲風IOLoop調用翻譯成ASYNCIO IOLoop好像是這樣的話:
def add_handler(self, fd, handler, events):
fd, fileobj = self.split_fd(fd)
if fd in self.handlers:
raise ValueError("fd %s added twice" % fd)
self.handlers[fd] = (fileobj, stack_context.wrap(handler))
if events & IOLoop.READ:
self.asyncio_loop.add_reader(
fd, self._handle_events, fd, IOLoop.READ)
self.readers.add(fd)
if events & IOLoop.WRITE:
self.asyncio_loop.add_writer(
fd, self._handle_events, fd, IOLoop.WRITE)
self.writers.add(fd)
只讀和WRITE標誌被翻譯,所有其他標誌被忽略。
有人能證實它是目前無法使用ASYNCIO來監視除了READ文件描述符的任何事件和寫入事件?或者我做錯了事,實際上有辦法嗎?