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验证码识别的方法
Jul 10 Python
Python计算两个日期相差天数的方法示例
May 23 Python
初探TensorFLow从文件读取图片的四种方式
Feb 06 Python
初探利用Python进行图文识别(OCR)
Feb 26 Python
PyQt5实现简单数据标注工具
Mar 18 Python
详解Python locals()的陷阱
Mar 26 Python
Python面向对象之类的封装操作示例
Jun 08 Python
详解Django-channels 实现WebSocket实例
Aug 22 Python
基于python的selenium两种文件上传操作实现详解
Sep 19 Python
python next()和iter()函数原理解析
Feb 07 Python
jupyter notebook 多行输出实例
Apr 09 Python
pytorch加载预训练模型与自己模型不匹配的解决方案
May 13 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中jsonp的跨域实例
2013/06/21 PHP
codeigniter教程之多文件上传使用示例
2014/02/11 PHP
PHP迭代与递归实现无限级分类
2017/08/28 PHP
jquery jqPlot API 中文使用教程(非常强大的图表工具)
2011/08/15 Javascript
浅析Javascript使用include/require
2013/11/13 Javascript
jquery清空表单数据示例分享
2014/02/13 Javascript
Iframe 自动适应页面的高度示例代码
2014/02/26 Javascript
js获取form的方法
2015/05/06 Javascript
JQuery中节点遍历方法实例
2015/05/18 Javascript
jQuery实现限制textarea文本框输入字符数量的方法
2015/05/28 Javascript
利用jQuery设计一个简单的web音乐播放器的实例分享
2016/03/08 Javascript
Bootstrap与KnockoutJs相结合实现分页效果实例详解
2016/05/03 Javascript
bootstrap模态框消失问题的解决方法
2016/12/02 Javascript
div实现自适应高度的textarea实现angular双向绑定
2017/01/08 Javascript
JS中的phototype详解
2017/02/04 Javascript
深入探究angular2 UI组件之primeNG用法
2017/07/26 Javascript
详解多页应用 Webpack4 配置优化与踩坑记录
2018/10/16 Javascript
简单了解JavaScript中常见的反模式
2019/06/21 Javascript
vuex actions异步修改状态的实例详解
2019/11/06 Javascript
vue treeselect获取当前选中项的label实例
2020/08/31 Javascript
[11:44]Ti9 OG夺冠时刻
2019/08/25 DOTA
最近Python有点火? 给你7个学习它的理由!
2017/06/26 Python
python检测主机的连通性并记录到文件的实例
2018/06/21 Python
Python中按键来获取指定的值
2019/03/02 Python
Python JSON格式数据的提取和保存的实现
2019/03/22 Python
Python数据可视化:箱线图多种库画法
2019/11/06 Python
详解CSS3的opacity属性设置透明效果的用法
2016/05/09 HTML / CSS
HTML5+CSS3实现无插件拖拽上传图片(支持预览与批量)
2017/01/05 HTML / CSS
canvas进阶之如何画出平滑的曲线
2018/10/15 HTML / CSS
企业道德讲堂实施方案
2014/03/19 职场文书
《第一次抱母亲》教学反思
2014/04/16 职场文书
幼儿园中秋节活动总结
2015/03/23 职场文书
行政人事主管岗位职责
2015/04/11 职场文书
二十年同学聚会致辞
2015/07/28 职场文书
基于CSS3画一个iPhone
2021/04/21 HTML / CSS
Nginx虚拟主机的配置步骤过程全解
2022/03/31 Servers