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中enumerate函数用法实例分析
May 20 Python
python获取元素在数组中索引号的方法
Jul 15 Python
python3爬取淘宝信息代码分析
Feb 10 Python
django_orm查询性能优化方法
Aug 20 Python
python+opencv实现阈值分割
Dec 26 Python
Python 函数返回值的示例代码
Mar 11 Python
PyQt5使用QTimer实现电子时钟
Jul 29 Python
python 爬虫百度地图的信息界面的实现方法
Oct 27 Python
Python中的sys.stdout.write实现打印刷新功能
Feb 21 Python
通过实例解析python subprocess模块原理及用法
Oct 10 Python
Django自定义YamlField实现过程解析
Nov 11 Python
Python中time标准库的使用教程
Apr 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变量引用的面试题
2010/08/08 PHP
工作需要写的一个js拖拽组件
2011/07/28 Javascript
jQuery:节点(插入,复制,替换,删除)操作
2013/03/04 Javascript
当鼠标移动时出现特效的JQuery代码
2013/11/08 Javascript
jQuery中ajax的post()方法用法实例
2014/12/26 Javascript
浅谈javascript属性onresize
2015/04/20 Javascript
举例说明JavaScript中的实例对象与原型对象
2016/03/11 Javascript
Node.js环境下编写爬虫爬取维基百科内容的实例分享
2016/06/12 Javascript
微信小程序开发图片拖拽实例详解
2017/05/05 Javascript
vue中引用阿里字体图标的方法
2018/02/10 Javascript
vuex state及mapState的基础用法详解
2018/04/19 Javascript
vue中render函数的使用详解
2018/10/12 Javascript
封装微信小程序http拦截器过程解析
2019/08/13 Javascript
详解NodeJs项目 CentOs linux服务器线上部署
2019/09/16 NodeJs
VUE实现密码验证与提示功能
2019/10/18 Javascript
JS数组方法join()用法实例分析
2020/01/18 Javascript
taro 实现购物车逻辑的实例代码
2020/06/05 Javascript
基于Vue+Webpack拆分路由文件实现管理
2020/11/16 Javascript
[01:04:22]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 IG vs EG
2018/04/01 DOTA
[31:47]夜魇凡尔赛茶话会 第三期01:选手知多少
2021/03/11 DOTA
对Python中数组的几种使用方法总结
2018/06/28 Python
用Pycharm实现鼠标滚轮控制字体大小的方法
2019/01/15 Python
python GUI库图形界面开发之PyQt5计数器控件QSpinBox详细使用方法与实例
2020/02/28 Python
python实现一个猜拳游戏
2020/04/05 Python
HTML5新增加标签和功能概述
2016/09/05 HTML / CSS
Myprotein丹麦官网:欧洲第一运动营养品牌
2019/04/15 全球购物
创建精神文明单位实施方案
2014/03/08 职场文书
小学生作文评语大全
2014/04/21 职场文书
纪检干部先进事迹材料
2014/08/23 职场文书
十一国庆节“向国旗敬礼”主题班会活动方案
2014/09/27 职场文书
幼儿园老师新年寄语2015
2014/12/08 职场文书
辞职书格式样本
2015/02/26 职场文书
四年级作文之说明文作文
2019/10/14 职场文书
SQL基础的查询语句
2021/11/11 MySQL
Win11显卡控制面板打开显卡设置方法
2022/04/20 数码科技
Python实现简单得递归下降Parser
2022/05/02 Python