下面是一个网上转载的实现思路,经过验证,发现是可行的,就记录下来。

思路

python多线程中要响应Ctrl+C的信号以杀死整个进程,需要:

1.把所有子线程设为Daemon;
2.使用isAlive()函数判断所有子线程是否完成,而不是在主线程中用join()函数等待完成;
3.写一个响应Ctrl+C信号的函数,修改全局变量,使得各子线程能够检测到,并正常退出。

源码

#!/usr/bin/env python
#encoding: utf-8
#filename: signal_demo.py
import threading, signaldef do_job(i, step):global exitedidx = iwhile not exited:if(idx < 10000000):print 'thread[%d]: idx=%d' % (i, idx)idx = idx + stepelse:breakif exited:print 'receive a signal to exit, thread[%d] stop.' % ielse:print 'thread[%d] complete.' % idef sig_handler(sig, frame):global exitedexited = Trueprint 'receive a signal %d, exited=%d' % (sig, exited)def main():#set signal handlersignal.signal(signal.SIGTERM, sig_handler)signal.signal(signal.SIGINT, sig_handler)pool = []pool_size = 50for 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 = Falsefor i in range(pool_size):alive = alive or pool[i].isAlive()if alive == True:breakif not alive:breakif __name__ == '__main__':exited = Falsemain()

命令行运行

python signal_demo.py

截图


参考文献

[1].http://www.jb51.net/article/35165.htm

python多线程下的信号处理程序示例相关推荐

  1. python多线程操作列表_详解Python多线程下的list

    list 是 Python 常用的几个基本数据类型之一.正常情况下我们会对 list 有增删改查的操作,显然易见不会有任何问题.那么如果我们试着在多线程下操作list 会有问题吗? 多线程下的 lis ...

  2. Python多线程下调用win32com包相关问题:pywintypes.com_error: (-2147221008, ‘尚未调用 CoInitialize。‘, None, None)问题处理

    报错1: pywintypes.com_error: (-2147221008, '尚未调用 CoInitialize.', None, None) 场景: 我是用 flask 服务操作接收的请求,通 ...

  3. Python多线程下实现单例模式,以及limit实例模式

    多线程环境下实现单例模式 下面介绍了两种Python实现单例模式的方法 1.重写__new__方法实现多线程情况下的单例模式 用new方法实现单例模式 import time, threadingcl ...

  4. python多线程问题及生产者消费者示例

    多线程能干什么: 生产者消费者问题: 一直生产,一直消费,中间有阀值,避免供求关系不平衡,导致出现问题. #线程安全问题,要是线程同时来,听谁的 #锁:一种数据结构 队列:先进线出 栈:先进后出1.解 ...

  5. python多线程挂了_python多线程输入的问题 python高效编程技巧13(如何在线程之间实现...

    python3 创建线程时不用args传参,执行线程时为什如果创建线程时在target里就传入了参数,为什么在启动线程时,线程不是在Python多线程下,每个线程的执行方式: 有什么了不起,大不了继续 ...

  6. 为什么在Python里推荐使用多进程而不是多线程?(为什么python多线程无法增加CPU使用率?)...

    最近在看Python的多线程,经常我们会听到老手说:"Python下多线程是鸡肋,推荐使用多进程!",但是为什么这么说呢? 要知其然,更要知其所以然.所以有了下面的深入研究: 首先 ...

  7. python多线程执行_python多线程实现同时执行两个while循环

    如果想同时执行两个while True循环,可以使用多线程threading来实现. 完整代码 #coding=gbk from time import sleep, ctime import thr ...

  8. python多线程不能利用多核cpu,但有时候多线程确实比单线程快。

    python 为什么不能利用多核 CPU  GIL 其实是因为在 python中有一个 GIL( Global Interpreter Lock),中文为:全局解释器锁.  1.最开始时候设计GIL是 ...

  9. Python 多线程学习

    前言 在爬虫学习的过程中,一旦爬取的数量过大,很容易带来效率问题,为了能够快速爬取我们想要的内容.为此我们可以使用多线程或者多进程来处理. 多线程和多进程是不一样的!一个是 threading 库,一 ...

最新文章

  1. 控制反转---依赖注入理解
  2. 西霞口船业公司疑遭外商合谋欺诈
  3. pytorch方法测试——卷积(二维)
  4. careercup-树与图 4.9
  5. windows系统和linux系统可以使用相同的js代码吗_使用Sboxr自动发现和利用DOM(客户端)XSS漏洞...
  6. 5、如何快速找到多个字典中的公共键(key) 6 如何让字典保持有序 7 如何实现用户的历史记录功能(最多n条)...
  7. 年薪80万难求一名AI程序员,技术革新世界已到来!
  8. pytorch: MaxUnpool2d 与 Upsampling
  9. 拓端tecdat|python隶属关系图模型:基于模型的网络中密集重叠社区检测方法
  10. 视频教程-IP地址划分(CCNA魔鬼训练营系列)-思科认证
  11. ichart添加click事件
  12. 广电为什么禁止投屏_手机投屏到电视机,以前可以投屏,现在不能了,是怎么回事,求解!...
  13. 上海python数据分析_python数据分析项目——链家上海二手房数据分析(一)
  14. AI笔记: 数学基础之反函数和6个基本初等函数
  15. Mr.Captain东:HTML+CSS+CSS3
  16. 将淘宝客数据导入自己的数据库
  17. laravel详情页
  18. 高纯度高活性艾美捷人重组MEGACD40L蛋白(可溶性)
  19. 【程序人生】跟小伙伴们聊聊我有趣的大学生活和我那两个好基友!
  20. 联想服务器RD450杨找不到raid选项,ThinkServer RD450服务器做RAID1

热门文章

  1. 2022-2028年中国2,3,6-三甲基苯酚行业市场研究及前瞻分析报告
  2. 2022-2028年中国复膜胶行业发展现状调查及市场前景趋势报告
  3. ERR_PTR PTR_ERR IS_ERR ERROR
  4. 数论(一)——素数,GCD,LCM
  5. postmaster.c 中的 ListenAddresses
  6. java jdk 1.8 安装_下载、安装、配置 java jdk1.8
  7. 李白打酒c语言编程,搞定了“李白打酒”,还原问题都迎刃而解
  8. windows增量到linux,Beyond Compare 3在windows和linux下实现提取增量包
  9. 计算机思维采用抽象和分解,凤凰机器人----什么是计算思维?凤凰机器人的编程课中是如何体现它的?...
  10. python3中format方法_python3 自定制format格式化,很多很多的内置方法。。。。。。。。。。。...