os.eventfd_read调用后eventfd计数器未归零问题咨询
eventfd计数器未重置问题原因
- Python侧逻辑自洽导致循环返回相同值:你的代码中调用
os.eventfd_read读取eventfd值后,只要返回值不等于99,就会立即调用os.eventfd_write将相同值写回eventfd。无EFD_SEMAPHORE标记的eventfd读操作确实会清空计数器,但你主动回写的操作会将计数器重置为刚读到的数值,下一次读自然会返回相同结果,属于代码逻辑问题,与eventfd本身实现无关。 - C侧写入目标错误:你封装的
epoll_write函数中,write操作的目标是epoll实例的文件描述符epoll_fd,而非eventfd的文件描述符。往epoll fd写入属于非法操作,不会触发eventfd的计数器更新,你需要将数据写入eventfd对应的fd才能实现跨进程信号通知。 - 额外注意:你将eventfd设置为非阻塞模式,当计数器为0时调用
os.eventfd_read会抛出BlockingIOError异常,当前代码未做异常捕获,后续运行会直接崩溃,建议补充异常处理逻辑。
Python中epoll_wait的调用入口
Python的epoll相关接口未放在os模块,而是归属select模块:
- 通过
select.epoll()创建epoll实例 - 实例的
poll()方法对应系统调用epoll_wait,支持自定义超时时间 register()/unregister()/modify()方法对应epoll_ctl的不同操作
内容的提问来源于stack exchange,提问作者RTC222
相关产品推荐
相关产品推荐

