python多线程下信号处理程序示例


Posted in Python onMay 31, 2019

本文实例为大家分享了python多线程下信号处理程序示例的具体代码,供大家参考,具体内容如下

下面是一个网上转载的实现思路,经过验证,发现是可行的,就记录下来。

思路

python多线程中要响应Ctrl+C的信号以杀死整个进程,需要:

1.把所有子线程设为Daemon;
2.使用isAlive()函数判断所有子线程是否完成,而不是在主线程中用join()函数等待完成;
3.写一个响应Ctrl+C信号的函数,修改全局变量,使得各子线程能够检测到,并正常退出。

源码

#!/usr/bin/env python
#encoding: utf-8
#filename: signal_demo.py
 
import threading, signal
 
 
def do_job(i, step):
 global exited
 idx = i
 while not exited:
  if(idx < 10000000):
   print 'thread[%d]: idx=%d' % (i, idx)
   idx = idx + step
  else:
   break
 if exited:
  print 'receive a signal to exit, thread[%d] stop.' % i
 else:
  print 'thread[%d] complete.' % i
 
def sig_handler(sig, frame):
 global exited
 exited = True
 print 'receive a signal %d, exited=%d' % (sig, exited)
 
def main():
 #set signal handler
 signal.signal(signal.SIGTERM, sig_handler)
 signal.signal(signal.SIGINT, sig_handler)
 pool = []
 pool_size = 50
 for i in range(pool_size):
  t = threading.Thread(target = do_job, args = (i, pool_size))
  t.setDaemon(True)
  pool.append(t)
  t.start()
 while 1:
  alive = False
  for i in range(pool_size):
   alive = alive or pool[i].isAlive()
   if alive == True:
    break
  if not alive:
   break
 
if __name__ == '__main__':
 exited = False
 main()

命令行运行

python signal_demo.py

截图

python多线程下信号处理程序示例

参考文献

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python使用logging结合decorator模式实现优化日志输出的方法
Apr 16 Python
python3制作捧腹网段子页爬虫
Feb 12 Python
Python实现图片转字符画的示例
Aug 22 Python
由Python编写的MySQL管理工具代码实例
Apr 09 Python
浅析Python3中的对象垃圾收集机制
Jun 06 Python
Django 限制访问频率的思路详解
Dec 24 Python
Pandas时间序列:时期(period)及其算术运算详解
Feb 25 Python
浅谈Python线程的同步互斥与死锁
Mar 22 Python
利用python实现凯撒密码加解密功能
Mar 31 Python
python网络编程:socketserver的基本使用方法实例分析
Apr 09 Python
Python发起请求提示UnicodeEncodeError错误代码解决方法
Apr 21 Python
python中os.path.join()函数实例用法
May 26 Python
浅谈Python大神都是这样处理XML文件的
May 31 #Python
Python2.7实现多进程下开发多线程示例
May 31 #Python
Python3内置模块之json编解码方法小结【推荐】
Dec 09 #Python
一文了解Python并发编程的工程实现方法
May 31 #Python
Python微信操控itchat的方法
May 31 #Python
python基于SMTP协议发送邮件
May 31 #Python
python 使用turtule绘制递归图形(螺旋、二叉树、谢尔宾斯基三角形)
May 30 #Python
You might like
PHP数据库表操作的封装类及用法实例详解
2016/07/12 PHP
详解Yii2.0 rules验证规则集合
2017/03/21 PHP
Laravel框架Eloquent ORM修改数据操作示例
2019/12/03 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
2019/12/20 PHP
自适应图片大小的弹出窗口
2006/07/27 Javascript
js监听表单value的修改同步问题,跨浏览器支持
2009/12/31 Javascript
js继承的实现代码
2010/08/05 Javascript
『JavaScript』限制Input只能输入数字实现思路及代码
2013/04/22 Javascript
JQuery分别取得每行最后一列和最后一行的示例代码
2013/08/18 Javascript
JSON序列化与解析原生JS方法且IE6和chrome测试通过
2013/09/05 Javascript
node.js中的fs.chown方法使用说明
2014/12/16 Javascript
javascript学习指南之回调问题
2016/04/23 Javascript
jQuery中的on与bind绑定事件区别实例详解
2017/02/28 Javascript
JS中使用textPath实现线条上的文字
2017/12/25 Javascript
layui table单元格事件修改值的方法
2019/09/24 Javascript
微信小程序批量监听输入框对按钮样式进行控制的实现代码
2019/10/12 Javascript
js实现简易计算器功能
2019/10/18 Javascript
NodeJs crypto加密制作token的实现代码
2019/11/15 NodeJs
vue使用openlayers实现移动点动画
2020/09/24 Javascript
VUE 项目在IE11白屏报错 SCRIPT1002: 语法错误的解决
2020/09/27 Javascript
[01:21]DOTA2新纪元-7.0新版本即将开启!
2016/12/11 DOTA
Python实现多线程下载文件的代码实例
2014/06/01 Python
Django 简单实现分页与搜索功能的示例代码
2019/11/07 Python
Windows上安装tensorflow  详细教程(图文详解)
2020/02/04 Python
HTML5上传文件显示进度的实现代码
2012/08/30 HTML / CSS
Canvas globalCompositeOperation
2018/12/18 HTML / CSS
html5录音功能实战示例
2019/03/25 HTML / CSS
JVM是一个编译程序还是解释程序
2012/09/11 面试题
九年级数学教学反思
2014/02/02 职场文书
《风娃娃》教学反思
2014/04/19 职场文书
《猴子种果树》教学反思
2014/04/26 职场文书
大学学风建设方案
2014/05/04 职场文书
机关班子查摆问题及整改措施
2014/10/28 职场文书
迎国庆主题班会
2015/08/17 职场文书
详解如何在Canvas中添加事件的方法
2021/04/17 Javascript
vue-cropper组件实现图片切割上传
2021/05/27 Vue.js