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 27 Python
python通过floor函数舍弃小数位的方法
Mar 17 Python
Cpy和Python的效率对比
Mar 20 Python
python常用知识梳理(必看篇)
Mar 23 Python
python利用标准库如何获取本地IP示例详解
Nov 01 Python
利用Pandas 创建空的DataFrame方法
Apr 08 Python
对dataframe进行列相加,行相加的实例
Jun 08 Python
用Python将mysql数据导出成json的方法
Aug 21 Python
Python中GeoJson和bokeh-1的使用讲解
Jan 03 Python
Django中的FBV和CBV用法详解
Sep 15 Python
python自动生成model文件过程详解
Nov 02 Python
python实现微信打飞机游戏
Mar 24 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/05/11 PHP
小议Function.apply() 之一------(函数的劫持与对象的复制)
2006/11/30 Javascript
Javascript中eval函数的使用方法与示例
2007/04/09 Javascript
Prototype RegExp对象 学习
2009/07/19 Javascript
JS实现在Repeater控件中创建可隐藏区域的代码
2010/09/16 Javascript
javascript天然的迭代器
2010/10/29 Javascript
jQuery获取单击节点对象的方法
2016/06/02 Javascript
原生js仿jquery实现对Ajax的封装
2016/10/04 Javascript
JS实现选定指定HTML元素对象中指定文本内容功能示例
2017/02/13 Javascript
JavaScript编写一个贪吃蛇游戏
2017/03/09 Javascript
使用vue实现grid-layout功能实例代码
2018/01/05 Javascript
vue.js整合vux中的上拉加载下拉刷新实例教程
2018/01/09 Javascript
element-ui 表格数据时间格式化的方法
2018/08/24 Javascript
layer.open组件获取弹出层页面变量、函数的实例
2019/09/25 Javascript
解决Ant Design Modal内嵌Form表单initialValue值不动态更新问题
2020/10/29 Javascript
微信小程序视频弹幕发送功能的实现
2020/12/28 Javascript
[01:21]DOTA2周边文化主题展 神秘商店火热开售
2017/07/30 DOTA
详解Python中with语句的用法
2015/04/15 Python
Python计算库numpy进行方差/标准方差/样本标准方差/协方差的计算
2018/12/28 Python
pyqt5 实现在别的窗口弹出进度条
2019/06/18 Python
使用pyecharts生成Echarts网页的实例
2019/08/12 Python
python网络编程:socketserver的基本使用方法实例分析
2020/04/09 Python
最新版 Windows10上安装Python 3.8.5的步骤详解
2020/11/28 Python
python接口自动化框架实战
2020/12/23 Python
python装饰器代码深入讲解
2021/03/01 Python
微软日本官方网站:Microsoft日本
2017/11/26 全球购物
Lookfantastic瑞典:英国知名美妆购物网站
2018/04/06 全球购物
高三地理教学反思
2014/01/11 职场文书
《藏戏》教学反思
2014/02/11 职场文书
转让协议书范本
2014/04/15 职场文书
合作协议书
2014/04/23 职场文书
公司口号大全
2014/06/11 职场文书
大四优秀党员个人民主评议
2014/09/19 职场文书
2015年社区消防安全工作总结
2015/10/14 职场文书
【海涛DOTA】D-cup邀请赛NV.cn vs DT.Love
2022/04/01 DOTA
CSS文本阴影 text-shadow 悬停效果详解
2022/05/25 HTML / CSS