博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[开发记录]事件驱动中一种优雅的退出方法
阅读量:6973 次
发布时间:2019-06-27

本文共 991 字,大约阅读时间需要 3 分钟。

在看tornado和Nginx代码的时候都会看到在最初事件反应堆初始化的时候都会自初始化一个事件,创建一个管道pipe并绑定到事件队列中。

这样的好处是可以优雅的在父进程中向管道pipe[0]发送退出或者其他信号,子进程监听到pipe[1]有事件产生后采取相应的措施。

class Waker(interface.Waker):    def __init__(self):        r, w = os.pipe()        _set_nonblocking(r)        _set_nonblocking(w)        set_close_exec(r)        set_close_exec(w)        self.reader = os.fdopen(r, "rb", 0)        self.writer = os.fdopen(w, "wb", 0)    def fileno(self):        return self.reader.fileno()    def write_fileno(self):        return self.writer.fileno()    def wake(self):        try:            self.writer.write(b"x")        except IOError:            pass    def consume(self):        try:            while True:                result = self.reader.read()                if not result:                    break        except IOError:            pass    def close(self):        self.reader.close()        self.writer.close()

以上是tornado中对管道的包装,其作用是创建管道,并将这个对象作为一个事件注册到反应堆中,用于子进程idle(由于没有事件加上一些信号被屏蔽,进程处于epoll系统调用中)

的时候唤醒子进程、

 

 

转载地址:http://zgesl.baihongyu.com/

你可能感兴趣的文章
获取时间的方法及常用时间类
查看>>
Git忽略文件
查看>>
如何删除或重置spfile中的参数
查看>>
Spring Boot 之 HelloWorld详解
查看>>
【RAC】如何修改vip 或者vip 对应的hostname
查看>>
Sql Server之旅——第三站 解惑那些背了多年聚集索引的人
查看>>
【LINUX】磁盘格式化 创建文件系统
查看>>
expect使用详解
查看>>
IOS(CGGeometry)几何类方法总结
查看>>
Quart2D setNeedsDisplay
查看>>
Android TextView点击效果
查看>>
GIX4中懒加载
查看>>
数据仓库专题(1)-数据仓库生命周期模型
查看>>
[华为机试练习题]43.在字符串中找出连续最长的数字串
查看>>
LogCat大量Unexpected value from nativeGetEnabledTags: 0
查看>>
一分钟了解阿里云产品:补丁管理
查看>>
区间调度问题
查看>>
一键U盘启动快捷方式
查看>>
阿里云容器服务体验: 部署 ShellPays 条码支付整合服务平台 -- (一)系统概要与环境准备...
查看>>
diff corp's HBA and multipath
查看>>