提问人:sergs 提问时间:9/4/2023 最后编辑:sergs 更新时间:9/4/2023 访问量:35
使用 python asyncio 循环轮询具有不同事件掩码的 fds
Poll fds with different event masks using python asyncio loop
问:
是否可以在 python3.8(.13)/linux 中使用 asyncio 库,使用轮询选择器轮询具有不同事件掩码的不同 fd。
我需要在一个 fd 和 POLLPRI |POLLERR 在另一个 fd 上,可能吗?
这就是我能够在 ONE fd 上收听的方式:
import asyncio
import selectors
import select
class CustomPollSelector(selectors.PollSelector):
_selector_cls = select.poll
_EVENT_READ = select.POLLPRI | select.POLLERR
_EVENT_WRITE = select.POLLOUT
selector = CustomPollSelector()
event_loop = asyncio.SelectorEventLoop(selector)
.
.
# listen for select.POLLPRI | select.POLLERR events on a fd_1 fd
event_loop.add_reader(fd_1, read_data_cb)
.
.
.
# TODO: how to listen ONLY on POLLIN events on another fd?
.
.
.
event_loop.run_forever()
我可以使用选择器注册另一个具有适当事件掩码的 fd:
selector.register(fd_2, select.POLLIN)
但是如何将此注册合并到event_loop中,据我了解,对于每个 fd 都有一个关联,当指定事件发生时要调用一个handler_cb,如何在库代码之外创建这样的关联?这看起来不是一个好主意......
这很奇怪,但看起来 asyncio 库没有提供 linux poll/epoll 的全部功能。
答: 暂无答案
评论
event_loop.add_reader(fd_2, some_other_cb)