poller.py 文件源码

python
阅读 21 收藏 0 点赞 0 评论 0

项目:SimpleReactor 作者: LightCong 项目源码 文件源码
def update_channel(self, channel):
        '''
        ??channel_map,??????kevent_lst
        '''
        import select
        if not channel:
            return
        fd = channel._fd

        if not fd in self.channel_map:
            # ?????,?????
            self.channel_count += 1

        self.channel_map[fd] = channel

        change_event_lst = []
        # ???????,?????

        if channel.need_read == True:
            # ?????,?????????
            kevent = select.kevent(channel._fd, filter=select.KQ_FILTER_READ,
                                   flags=select.KQ_EV_ADD | select.KQ_EV_ENABLE)
            change_event_lst.append(kevent)
        else:
            # ?????
            kevent = select.kevent(channel._fd, filter=select.KQ_FILTER_READ, flags=select.KQ_EV_DELETE)
            change_event_lst.append(kevent)

        if channel.need_write == True:
            # ?????,?????????
            kevent = select.kevent(channel._fd, filter=select.KQ_FILTER_WRITE,
                                   flags=select.KQ_EV_ADD | select.KQ_EV_ENABLE)
            change_event_lst.append(kevent)
            pass

        else:
            # ?????
            kevent = select.kevent(channel._fd, filter=select.KQ_FILTER_WRITE, flags=select.KQ_EV_DELETE)
            change_event_lst.append(kevent)

        try:
            self.kq.control(change_event_lst, len(change_event_lst), 0)
        except select.error, err:
            # ??kqueue??
            raise Exception()
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号