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中的二进制位运算符
May 13 Python
Python yield 使用浅析
May 28 Python
Python中threading模块join函数用法实例分析
Jun 04 Python
python相似模块用例
Mar 04 Python
浅谈python配置与使用OpenCV踩的一些坑
Apr 02 Python
python dataframe常见操作方法:实现取行、列、切片、统计特征值
Jun 09 Python
朴素贝叶斯分类算法原理与Python实现与使用方法案例
Jun 26 Python
python读取图片的方式,以及将图片以三维数组的形式输出方法
Jul 03 Python
安装Pycharm2019以及配置anconda教程的方法步骤
Nov 11 Python
Python requests获取网页常用方法解析
Feb 20 Python
python自动提取文本中的时间(包含中文日期)
Aug 31 Python
pycharm部署django项目到云服务器的详细流程
Jun 29 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函数解决SQL injection
2006/12/09 PHP
php下使用SMTP发邮件的代码
2008/01/10 PHP
PHP 图片上传代码
2011/09/13 PHP
Yii框架中 find findAll 查找出制定的字段的方法对比
2014/09/10 PHP
php防止sql注入简单分析
2015/03/18 PHP
10款PHP开源商城系统汇总介绍
2015/07/23 PHP
php封装一个异常的处理类
2017/06/08 PHP
PHP基于redis计数器类定义与用法示例
2018/02/08 PHP
JavaScipt基本教程之前言
2008/01/16 Javascript
JavaScript 自动完成脚本整理(33个)
2009/10/20 Javascript
jquery实现倒计时代码分享
2014/06/13 Javascript
轻松创建nodejs服务器(9):实现非阻塞操作
2014/12/18 NodeJs
JavaScript编写简单的计算器
2015/11/25 Javascript
jquery Ajax实现Select动态添加数据
2017/06/08 jQuery
vue bus全局事件中心简单Demo详解
2018/02/26 Javascript
深入理解与使用keep-alive(配合router-view缓存整个路由页面)
2018/09/25 Javascript
详解Node.js 中使用 ECDSA 签名遇到的坑
2018/11/26 Javascript
vue-router源码之history类的浅析
2019/05/21 Javascript
javascript function(函数类型)使用与注意事项小结
2019/06/10 Javascript
使用js在layui中实现上传图片压缩
2019/06/18 Javascript
js属性对象的hasOwnProperty方法的使用
2021/02/05 Javascript
[40:57]TI4 循环赛第二日 iG vs EG
2014/07/11 DOTA
[01:02:06]LGD vs Mineski Supermajor 胜者组 BO3 第二场 6.5
2018/06/06 DOTA
[01:32:22]DOTA2-DPC中国联赛 正赛 Ehome vs VG BO3 第一场 2月5日
2021/03/11 DOTA
python快排算法详解
2019/03/04 Python
python实现在函数中修改变量值的方法
2019/07/16 Python
PyQt5实现暗黑风格的计时器
2019/07/29 Python
Python List列表对象内置方法实例详解
2019/10/22 Python
matplotlib绘制正余弦曲线图的实现
2021/02/22 Python
深入理解HTML5定时器requestAnimationFrame的使用
2018/12/12 HTML / CSS
Debenhams爱尔兰:英国知名的百货公司
2017/01/02 全球购物
马来西亚在线健康商店:Medipal Malaysia
2020/04/13 全球购物
超市实习总结自我鉴定
2013/09/19 职场文书
农林环境专业求职信
2014/03/13 职场文书
Redis集群新增、删除节点以及动态增加内存的方法
2021/09/04 Redis
欧元符号 €
2022/02/17 杂记