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的Tornado框架中实现简单的在线代理的教程
May 02 Python
Python yield 使用浅析
May 28 Python
python logging日志模块以及多进程日志详解
Apr 18 Python
django2.2安装错误最全的解决方案(小结)
Sep 24 Python
使用python去除图片白色像素的实例
Dec 12 Python
Python读取YAML文件过程详解
Dec 30 Python
Python基于Dlib的人脸识别系统的实现
Feb 26 Python
Python 使用 PyQt5 开发的关机小工具分享
Jul 16 Python
pycharm中使用request和Pytest进行接口测试的方法
Jul 31 Python
Python趣味入门教程之循环语句while
Aug 26 Python
Python使用random模块实现掷骰子游戏的示例代码
Apr 29 Python
微信小程序调用python模型
Apr 21 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中is_file不能替代file_exists的理由
2014/03/04 PHP
教你识别简单的免查杀PHP后门
2015/09/13 PHP
Yii实现文章列表置顶功能示例
2016/10/18 PHP
PHP基于SMTP协议实现邮件发送实例代码
2017/04/27 PHP
img标签中onerror用法
2009/08/13 Javascript
JQuery Tips相关(1)----关于$.Ready()
2014/08/14 Javascript
js实现基于正则表达式的轻量提示插件
2015/08/29 Javascript
巧方法 JavaScript获取超链接的绝对URL地址
2016/06/14 Javascript
浅析Ajax语法
2016/12/05 Javascript
js图片轮播手动切换特效
2017/01/12 Javascript
jqueryUI tab标签页代码分享
2017/10/09 jQuery
NodeJS搭建HTTP服务器的实现步骤
2018/10/12 NodeJs
Nuxt.js实现一个SSR的前端博客的示例代码
2019/09/06 Javascript
Vue-Cli项目优化操作的实现
2019/10/27 Javascript
js实现页面图片消除效果
2020/03/24 Javascript
解决antd 下拉框 input [defaultValue] 的值的问题
2020/10/31 Javascript
[02:34]DOTA2英雄基础教程 幽鬼
2014/01/02 DOTA
[49:20]2014 DOTA2国际邀请赛中国区预选赛5.21 CIS VS TongFu
2014/05/22 DOTA
Python3 模块、包调用&amp;路径详解
2017/10/25 Python
Python中Scrapy爬虫图片处理详解
2017/11/29 Python
Python多线程threading模块用法实例分析
2019/05/22 Python
python twilio模块实现发送手机短信功能
2019/08/02 Python
python else语句在循环中的运用详解
2020/07/06 Python
Python爬虫如何破解JS加密的Cookie
2020/11/19 Python
Python爬虫逆向分析某云音乐加密参数的实例分析
2020/12/04 Python
美国户外运动商店:Sun & Ski
2018/08/23 全球购物
行政前台岗位职责
2013/12/04 职场文书
成功的餐厅经营创业计划书
2014/01/15 职场文书
学校评语大全
2014/05/06 职场文书
活动倡议书范文
2014/05/13 职场文书
村居抓节水倡议书
2014/05/19 职场文书
高一军训感想
2015/08/07 职场文书
MySQL优化之如何写出高质量sql语句
2021/05/17 MySQL
Pytorch 如何实现常用正则化
2021/05/27 Python
SpringCloud Function SpEL注入漏洞分析及环境搭建
2022/04/08 Java/Android
小喇叭开始广播了! 四十多年前珍贵老照片
2022/05/09 无线电