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如何查看系统网络流量的信息
Sep 12 Python
深入理解python中的atexit模块
Mar 07 Python
python3 pandas 读取MySQL数据和插入的实例
Apr 20 Python
python去除扩展名的实例讲解
Apr 23 Python
python 接收处理外带的参数方法
Dec 03 Python
python3使用matplotlib绘制条形图
Mar 25 Python
python3调用windows dos命令的例子
Aug 14 Python
使用python模拟高斯分布例子
Dec 09 Python
python GUI库图形界面开发之PyQt5信号与槽基础使用方法与实例
Mar 06 Python
基于python实现图片转字符画代码实例
Sep 04 Python
2020年10款优秀的Python第三方库,看看有你中意的吗?
Jan 12 Python
Python入门之使用pandas分析excel数据
May 12 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学习之function的用法
2012/07/14 PHP
PHP根据传来的16进制颜色代码自动改变背景颜色
2014/06/13 PHP
destoon在360浏览器下出现用户被强行注销的解决方法
2014/06/26 PHP
YII实现分页的方法
2014/07/09 PHP
php中动态修改ini配置
2014/10/14 PHP
ThinkPHP自定义函数解决模板标签加减运算的方法
2015/07/03 PHP
PHP编写RESTful接口
2016/02/23 PHP
PHP判断JSON对象是否存在的方法(推荐)
2016/07/06 PHP
JavaScript 无符号右移赋值操作
2009/04/17 Javascript
jquery 倒计时效果实现秒杀思路
2013/09/11 Javascript
Ionic实现仿通讯录点击滑动及$ionicscrolldelegate使用分析
2016/01/18 Javascript
Bootstrap开发实战之响应式轮播图
2016/06/02 Javascript
jsp 自动编译机制详细介绍
2016/12/01 Javascript
jquery validation验证表单插件
2017/01/07 Javascript
微信小程序wx.navigateTo方法里的events参数使用详情及场景
2020/01/07 Javascript
js实现移动端吸顶效果
2020/01/08 Javascript
微信小程序indexOf的替换方法(推荐)
2020/01/14 Javascript
原生JavaScript实现贪吃蛇游戏
2020/11/04 Javascript
jQuery实现动态操作table行
2020/11/23 jQuery
[49:40]2018DOTA2亚洲邀请赛小组赛 A组加赛 TNC vs Newbee
2018/04/03 DOTA
人脸识别经典算法一 特征脸方法(Eigenface)
2018/03/13 Python
Centos部署django服务nginx+uwsgi的方法
2019/01/02 Python
python json load json 数据后出现乱序的解决方案
2020/02/27 Python
Python响应对象text属性乱码解决方案
2020/03/31 Python
Python select及selectors模块概念用法详解
2020/06/22 Python
python怎么判断素数
2020/07/01 Python
家庭户外服装:Hawkshead
2017/11/02 全球购物
Ellos瑞典官网:北欧地区时尚、美容和住宅领域领先的电子商务网站
2019/11/21 全球购物
智能家居、吸尘器、滑板车、电动自行车网上购物:Geekmaxi
2021/01/18 全球购物
财务工作者先进事迹材料
2014/01/17 职场文书
岗位聘任书范文
2014/03/29 职场文书
2014年纪委工作总结
2014/12/05 职场文书
市场营销计划书范文
2015/01/16 职场文书
2015年公民道德宣传日活动总结
2015/03/23 职场文书
Python django中如何使用restful框架
2021/06/23 Python
Java 超详细讲解hashCode方法
2022/04/07 Java/Android