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多重继承新算法C3介绍
Sep 28 Python
详解Python中的strftime()方法的使用
May 22 Python
详解Python读取配置文件模块ConfigParser
May 11 Python
解决matplotlib库show()方法不显示图片的问题
May 24 Python
对pandas的层次索引与取值的新方法详解
Nov 06 Python
pygame游戏之旅 游戏中添加显示文字
Nov 20 Python
Python离线安装PIL 模块的方法
Jan 08 Python
windows10下安装TensorFlow Object Detection API的步骤
Jun 13 Python
python super函数使用方法详解
Feb 14 Python
Python Django view 两种return的实现方式
Mar 16 Python
Python实现在线批量美颜功能过程解析
Jun 10 Python
浅谈如何使用python抓取网页中的动态数据实现
Aug 17 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
VML绘图板②脚本--VMLgraph.js、XMLtool.js
2006/10/09 PHP
Symfony2框架学习笔记之HTTP Cache用法详解
2016/03/18 PHP
PHP环形链表实现方法示例
2017/09/15 PHP
理解Javascript_13_执行模型详解
2010/10/20 Javascript
HTML中的setCapture和releaseCapture使用介绍
2012/03/21 Javascript
js indexOf()定义和用法
2012/10/21 Javascript
JavaScript中string转换成number介绍
2014/12/31 Javascript
JS实现同时搜索百度和必应的方法
2015/01/27 Javascript
基于jquery实现鼠标左右拖动滑块滑动附源码下载
2015/12/23 Javascript
AngularJS仿苹果滑屏删除控件
2016/01/18 Javascript
javascript拖拽效果延伸学习
2016/04/04 Javascript
实例讲解使用原生JavaScript处理AJAX请求的方法
2016/05/10 Javascript
Bootstrap多级菜单的实现代码
2017/05/23 Javascript
angular ng-click防止重复提交实例
2017/06/16 Javascript
vue语法之拼接字符串的示例代码
2017/10/25 Javascript
微信小程序之圆形进度条实现思路
2018/02/22 Javascript
ES6 Symbol数据类型的应用实例分析
2019/06/26 Javascript
react koa rematch 如何打造一套服务端渲染架子
2019/06/26 Javascript
WEB前端性能优化的7大手段详解
2020/02/04 Javascript
[01:20]2018DOTA2亚洲邀请赛总决赛战队LGD晋级之路
2018/04/07 DOTA
python 获取网页编码方式实现代码
2017/03/11 Python
在Pycharm中修改文件默认打开方式的方法
2019/01/17 Python
Python3 批量扫描端口的例子
2019/07/25 Python
Python如何使用内置库matplotlib绘制折线图
2020/02/24 Python
Django实现从数据库中获取到的数据转换为dict
2020/03/27 Python
Python调用shell cmd方法代码示例解析
2020/06/18 Python
优秀的教师个人的中文求职信
2013/09/21 职场文书
渡河少年教学反思
2014/02/12 职场文书
2014年母亲节寄语
2014/05/07 职场文书
卫生标语大全
2014/06/21 职场文书
房产公证委托书范本
2014/09/20 职场文书
四风问题民主生活会对照检查材料思想汇报
2014/09/27 职场文书
2016年社区植树节活动总结
2016/03/16 职场文书
html+css合并表格边框的示例代码
2021/03/31 HTML / CSS
python plt.plot bar 如何设置绘图尺寸大小
2021/06/01 Python
SQL语句中JOIN的用法场景分析
2021/07/25 SQL Server