python中的signal.set_wakeup_fd的理解
来源:互联网 发布:新西兰羊毛被品牌知乎 编辑:程序博客网 时间:2024/06/04 19:36
最近在看tornado的源码,看到好几次signal.set_wakeup_fd(fd)这个函数.
这个函数简单的理解就是触发到signal时,会往fd中写入’\0’.
找了个简单的例子自己增加了部分实现和注释,从例子中能够更容易的理解这个函数.
代码
#!/usr/bin/env python# encoding: utf-8import selectimport signalimport fcntlimport ospipe_r, pipe_w = os.pipe()#r_fd_obj = os.fdopen(r, "rb", 0) #0 means unbuffered,1是默认buffer数字,具体的数字就是相应数量byte的buffer#r_fd = i_fd_obj.fileno()flags = fcntl.fcntl(pipe_w, fcntl.F_GETFL, 0)flags = flags | os.O_NONBLOCKflags = fcntl.fcntl(pipe_w, fcntl.F_SETFL, flags)signal.set_wakeup_fd(pipe_w)# Mask out signal handler#不设置这个的话,就会运行SIGALRM默认的handler,会打印 alarm clock,然后退出signal.signal(signal.SIGALRM, lambda x,y: None) #signal.signal(signalnum, handler)# Set up a signal to repeat every 2 seconds#signal.ITIMER_REAL :Decrements interval timer in real time, and delivers SIGALRM upon expiration.#signal.setitimer(which, seconds[, interval]),The interval timer specified by which can be cleared by setting seconds to zero.signal.setitimer(signal.ITIMER_REAL, 2, 2)poller = select.epoll()poller.register(pipe_r, select.EPOLLIN)print "start"while True: try: events = poller.poll() for fd, flags in events: print "receive Signal" print fd, flags # read a single event #os.read(fd, n),Read at most n bytes from file descriptor fd. #Return a string containing the bytes read. #If the end of the file referred to by fd has been reached, an empty string is returned. print os.read(pipe_r, 1) except IOError: pass
0 0
- python中的signal.set_wakeup_fd的理解
- signal函数声明的理解
- python中的异常的理解
- 理解signal()
- QT的signal和slot的理解
- python signal
- 深入理解Linux kernel(内核)中的signal函数
- 深入理解Linux kernel(内核)中的signal函数
- python 数字信号的滤波器设计 signal.buffer
- 对python中的装饰器的理解
- QT中的signal/slot的事件
- 170619 利用python实现matlab中的agwn(signal,SNR)函数
- 理解 Python 中的线程
- 理解 Python 中的线程
- python中的self理解
- 理解python中的self
- python中的self理解
- Python中的rank()理解
- css背景
- 一步一步走进Linux HOOK API(四)
- 探索Android Material Design 中的Tint(着色)
- css表格
- jquery datatable显示隐藏子表
- python中的signal.set_wakeup_fd的理解
- java面向对象编程的4个特征以及重写重载的区别
- 获取路径
- 一步一步走进Linux HOOK API(五)
- css定位
- 运行在yarn上的spark job使用log4j无法记录日志问题
- IOS_study day 05
- QEMU虚拟机关键源代码学习
- ubuntu nfs 开发板