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入门之三角函数tan()函数实例详解
Nov 08 Python
TensorFlow模型保存/载入的两种方法
Mar 08 Python
JavaScript实现一维数组转化为二维数组
Apr 17 Python
pandas.DataFrame删除/选取含有特定数值的行或列实例
Nov 07 Python
Django学习笔记之为Model添加Action
Apr 30 Python
Python hashlib加密模块常用方法解析
Dec 18 Python
浅谈pytorch卷积核大小的设置对全连接神经元的影响
Jan 10 Python
python列表删除和多重循环退出原理详解
Mar 26 Python
Python基础详解之邮件处理
Apr 28 Python
使用Python脚本对GiteePages进行一键部署的使用说明
May 27 Python
解析目标检测之IoU
Jun 26 Python
Python自动化实战之接口请求的实现
May 30 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
显示youtube视频缩略图和Vimeo视频缩略图代码分享
2014/02/13 PHP
typecho插件编写教程(一):Hello World
2015/05/28 PHP
PHP浮点比较大小的方法
2016/02/14 PHP
ThinkPHP3.2框架使用addAll()批量插入数据的方法
2017/03/16 PHP
thinkPHP5.1框架中Request类四种调用方式示例
2019/08/03 PHP
ThinkPHP5分页paginate代码实例解析
2020/11/10 PHP
range 标准化之获取
2011/08/28 Javascript
设置checkbox为只读(readOnly)的两种方式
2013/10/11 Javascript
Javascript遍历Html Table示例(包括内容和属性值)
2014/07/08 Javascript
javascript日期验证之输入日期大于等于当前日期
2015/12/13 Javascript
jQuery遮罩层效果实例分析
2016/01/14 Javascript
如何解决IONIC页面底部被遮住无法向上滚动问题
2016/09/06 Javascript
Ajax+FormData+javascript实现无刷新表单信息提交
2016/10/24 Javascript
3分钟掌握常用的JS操作JSON方法总结
2017/04/25 Javascript
Angular6笔记之封装http的示例代码
2018/07/27 Javascript
webpack css加载和图片加载的方法示例
2018/09/11 Javascript
node实现生成带参数的小程序二维码并保存到本地功能示例
2018/12/05 Javascript
vue2 拖动排序 vuedraggable组件的实现
2019/08/08 Javascript
vue 导航内容设置选中状态样式的例子
2019/11/01 Javascript
Vue移动端实现图片上传及超过1M压缩上传
2019/12/23 Javascript
基于VUE实现判断设备是PC还是移动端
2020/07/03 Javascript
在 Django/Flask 开发服务器上使用 HTTPS
2014/07/03 Python
Python实现把xml或xsl转换为html格式
2015/04/08 Python
浅谈python字符串方法的简单使用
2016/07/18 Python
python绘制直方图和密度图的实例
2019/07/08 Python
关于Numpy中的行向量和列向量详解
2019/11/30 Python
mac在matplotlib中显示中文的操作方法
2020/03/06 Python
python3 deque 双向队列创建与使用方法分析
2020/03/24 Python
梅西酒窖:Macy’s Wine Cellar
2018/01/07 全球购物
拒绝黄毒毒宣传标语
2014/06/26 职场文书
2014年司法所工作总结
2014/11/22 职场文书
辞职信范文大全
2015/03/02 职场文书
springcloud之Feign超时问题的解决
2021/06/24 Java/Android
win10电脑双屏显示一个黑屏怎么办?win10电脑双屏显示一个黑屏解决方法
2022/07/15 数码科技
Nginx 502 bad gateway错误解决的九种方案及原因
2022/08/14 Servers
MySQL使用IF语句及用case语句对条件并结果进行判断 
2022/09/23 MySQL