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写一个贪吃蛇游戏实例代码
Aug 21 Python
通过python检测字符串的字母
Feb 18 Python
python json load json 数据后出现乱序的解决方案
Feb 27 Python
Python 输出详细的异常信息(traceback)方式
Apr 08 Python
Python基于Hypothesis测试库生成测试数据
Apr 29 Python
pyinstaller将含有多个py文件的python程序做成exe
Apr 29 Python
pyCharm 设置调试输出窗口中文显示方式(字符码转换)
Jun 09 Python
python怎么判断模块安装完成
Jun 19 Python
使用TensorBoard进行超参数优化的实现
Jul 06 Python
详解如何在PyCharm控制台中输出彩色文字和背景
Aug 17 Python
python 解决微分方程的操作(数值解法)
May 26 Python
Python机器学习之基于Pytorch实现猫狗分类
Jun 08 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
smarty的保留变量问题
2008/10/23 PHP
PHP和Mysqlweb应用开发核心技术-第1部分 Php基础-2 php语言介绍
2011/07/03 PHP
WordPress中访客登陆实现邮件提醒的PHP脚本实例分享
2015/12/14 PHP
PHP中有关长整数的一些操作教程
2019/09/11 PHP
判断控件是否已加载完成的代码
2010/02/24 Javascript
IE8下jQuery改变png图片透明度时出现的黑边
2015/08/30 Javascript
jquery实现华丽的可折角广告代码
2015/09/02 Javascript
JavaScrip调试技巧之断点调试
2015/10/22 Javascript
Bootstrap嵌入jqGrid,使你的table牛逼起来
2016/05/05 Javascript
vue绑定class与行间样式style详解
2017/08/16 Javascript
JS立即执行函数功能与用法分析
2019/01/15 Javascript
ES7之Async/await的使用详解
2019/03/28 Javascript
使用typescript构建Vue应用的实现
2019/08/26 Javascript
javascript随机变色实例代码
2019/10/15 Javascript
[00:16]热血竞技场
2019/03/06 DOTA
Python里隐藏的“禅”
2014/06/16 Python
Python编程中使用Pillow来处理图像的基础教程
2015/11/20 Python
浅析Python中的for 循环
2016/06/09 Python
基于Django模板中的数字自增(详解)
2017/09/05 Python
python TCP Socket的粘包和分包的处理详解
2018/02/09 Python
numpy中的delete删除数组整行和整列的实例
2018/05/09 Python
python3 property装饰器实现原理与用法示例
2019/05/15 Python
Python logging设置和logger解析
2019/08/28 Python
Pandas 解决dataframe的一列进行向下顺移问题
2019/12/27 Python
Python中sorted()排序与字母大小写的问题
2020/01/14 Python
Python运行异常管理解决方案
2020/03/09 Python
python3 logging日志封装实例
2020/04/08 Python
html5移动端价格输入键盘的实现
2019/09/16 HTML / CSS
SmartBuyGlasses英国:购买太阳镜和眼镜
2018/01/29 全球购物
实习推荐信
2014/05/10 职场文书
教师党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
意外死亡赔偿协议书
2014/10/14 职场文书
上诉答辩状范文
2015/05/22 职场文书
MySQL触发器的使用
2021/05/24 MySQL
SQL Server代理:理解SQL代理错误日志处理方法
2021/06/30 SQL Server
Golang 切片(Slice)实现增删改查
2022/04/22 Golang