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爬虫框架Scrapy实战之批量抓取招聘信息
Aug 07 Python
python实现实时监控文件的方法
Aug 26 Python
CentOS 6.X系统下升级Python2.6到Python2.7 的方法
Oct 12 Python
Python的时间模块datetime详解
Apr 17 Python
Python基于tkinter模块实现的改名小工具示例
Jul 27 Python
Zookeeper接口kazoo实例解析
Jan 22 Python
Sanic框架请求与响应实例分析
Jul 16 Python
Python 画出来六维图
Jul 26 Python
python tqdm 实现滚动条不上下滚动代码(保持一行内滚动)
Feb 19 Python
音频处理 windows10下python三方库librosa安装教程
Jun 20 Python
Django执行源生mysql语句实现过程解析
Nov 12 Python
windows下python 3.9 Numpy scipy和matlabplot的安装教程详解
Nov 28 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
Fatal error: Call to undefined function curl_init()解决方法
2010/04/09 PHP
php+ajax实时输入自动搜索匹配的方法
2014/12/26 PHP
php截取中文字符串函数实例
2015/02/23 PHP
如何解决PHP无法实现多线程的问题
2015/09/25 PHP
PHP钩子与简单分发方式实例分析
2017/09/04 PHP
php实现生成PDF文件的方法示例【基于FPDF类库】
2018/07/21 PHP
Javascript 按位与运算符 (&amp;)使用介绍
2014/02/04 Javascript
IE8中使用javascript动态加载CSS的解决方法
2014/06/17 Javascript
javascript实时显示北京时间的方法
2015/03/12 Javascript
JavaScript获取网页表单提交方式的方法
2015/04/02 Javascript
javascript中DOM复选框选择用法实例
2015/05/14 Javascript
学习JavaScript设计模式之单例模式
2016/01/19 Javascript
Webwork 实现文件上传下载代码详解
2016/02/02 Javascript
Vue.js学习笔记之修饰符详解
2017/07/25 Javascript
JS实现简单短信验证码界面
2017/08/07 Javascript
Node使用Sequlize连接Mysql报错:Access denied for user ‘xxx’@‘localhost’
2018/01/03 Javascript
nodejs实现连接mongodb数据库的方法示例
2018/03/15 NodeJs
安装vue-cli的简易过程
2018/05/22 Javascript
angular2实现统一的http请求头方法
2018/08/13 Javascript
分享15个最受欢迎的Python开源框架
2014/07/13 Python
Python数据类型详解(一)字符串
2016/05/08 Python
Python中static相关知识小结
2018/01/02 Python
python2 与 python3 实现共存的方法
2018/07/12 Python
python之验证码生成(gvcode与captcha)
2019/01/02 Python
python3反转字符串的3种方法(小结)
2019/11/07 Python
宠物店的创业计划书范文
2014/01/11 职场文书
汽车维修工岗位职责
2014/02/12 职场文书
应届毕业生如何写求职信
2014/02/16 职场文书
护理专业求职信
2014/06/15 职场文书
第一批党的群众路线教育实践活动总结报告
2014/07/03 职场文书
驾驶员安全责任书范本
2014/07/24 职场文书
校园游戏活动新闻稿
2014/10/15 职场文书
领导参观欢迎词
2015/01/26 职场文书
企业财务经理岗位职责
2015/04/08 职场文书
公司劳动纪律管理制度
2015/08/04 职场文书
Python基础之进程详解
2021/05/21 Python