时间:2021-05-22
本文实例为大家分享了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中用Ctrl+C终止多线程程序的问题解决
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
多线程概述多线程使得程序内部可以分出多个线程来做多件事情,充分利用CPU空闲时间,提升处理效率。python提供了两个模块来实现多线程thread和thread
本文主要讲述了多线程开发中经典示例,通过本示例,可以加深对多线程的理解。示例概述:下面用一个模拟吃苹果的实例,说明C#中多线程的实现方法。要求开发一个程序实现如
Python多线程实例详解多线程通常是新开一个后台线程去处理比较耗时的操作,Python做后台线程处理也是很简单的,今天从官方文档中找到了一个Demo.实例代码
简单的基于Python2.7版本的多进程下开发多线程的示例,供大家参考,具体内容如下可以使得程序执行效率至少提升10倍#!/usr/bin/envpython#
1.多线程的作用简而言之,多线程是并行处理相互独立的子任务,从而大幅度提高整个任务的效率。2.Python中的多线程相关模块和方法Python中提供几个用于多线