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 cookielib 登录人人网的实现代码
Dec 19 Python
Python读写Excel文件的实例
Nov 01 Python
python实现倒计时的示例
Feb 14 Python
python对url格式解析的方法
May 13 Python
Python脚本暴力破解栅栏密码
Oct 19 Python
Python2随机数列生成器简单实例
Sep 04 Python
python 对象和json互相转换方法
Mar 22 Python
django之使用celery-把耗时程序放到celery里面执行的方法
Jul 12 Python
浅谈pycharm使用及设置方法
Sep 09 Python
django queryset 去重 .distinct()说明
May 19 Python
keras 权重保存和权重载入方式
May 21 Python
Python unittest如何生成HTMLTestRunner模块
Sep 08 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过滤★等特殊符号的正则
2014/01/27 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
2017/09/16 PHP
jQuery插件 tabBox实现代码
2010/02/09 Javascript
浅析JavaScript中的CSS属性及命名规范
2013/11/28 Javascript
Jquery方式获取iframe页面中的 Dom元素
2014/05/07 Javascript
js和jquery如何获取图片真实的宽度和高度
2014/09/28 Javascript
javascript实现简单的html5视频播放器
2015/05/06 Javascript
微信JSSDK上传图片
2015/08/23 Javascript
js实现图片轮播效果
2015/12/19 Javascript
Bootstrap Metronic完全响应式管理模板之菜单栏学习笔记
2016/07/08 Javascript
JS实现图文并茂的tab选项卡效果示例【附demo源码下载】
2016/09/21 Javascript
JavaScript实现一个空中避难的小游戏
2017/06/06 Javascript
jQuery实现简单的手风琴效果
2020/04/17 jQuery
Vue中正确使用jQuery的方法
2017/10/30 jQuery
vue 指定组件缓存实例详解
2018/04/01 Javascript
小程序获取当前位置加搜索附近热门小区及商区的方法
2019/04/08 Javascript
javascript异步编程的六种方式总结
2019/05/17 Javascript
如何在Vue中使localStorage具有响应式(思想实验)
2020/07/14 Javascript
[00:30]明星选手化身超级英雄!2018DOTA2亚洲邀请赛全明星赛来临!
2018/04/06 DOTA
[48:22]VGJ.S vs VG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python调用百度语音REST API
2018/08/30 Python
Python3获取电脑IP、主机名、Mac地址的方法示例
2019/04/11 Python
Python数据结构与算法(几种排序)小结
2019/06/22 Python
Python将string转换到float的实例方法
2019/07/29 Python
Python利用requests模块下载图片实例代码
2019/08/12 Python
Python爬取智联招聘数据分析师岗位相关信息的方法
2019/08/13 Python
python可视化分析的实现(matplotlib、seaborn、ggplot2)
2021/02/03 Python
一款css实现的鼠标经过按钮的特效
2014/09/11 HTML / CSS
澳大利亚儿童和婴儿产品在线商店:Lime Tree Kids
2017/10/05 全球购物
Footshop法国:购买运动鞋
2020/01/19 全球购物
业务员薪酬管理制度
2014/01/15 职场文书
离婚协议书范文2015
2015/01/26 职场文书
统计工作个人总结
2015/03/03 职场文书
《我的长生果》教学反思
2016/02/20 职场文书
幼儿园2016圣诞节活动总结
2016/03/31 职场文书
多台电脑共享文件怎么设置?多台电脑共享文件操作教程
2022/04/08 数码科技