• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >python > Python中用Ctrl+C终止多线程程序的问题解决

Python中用Ctrl+C终止多线程程序的问题解决

作者: 字体:[增加 减小] 来源:互联网

通过本文主要向大家介绍了python ctrl z,python ctrl,复制是ctrl加什么,ctrl,全选是ctrl加什么等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

上面是一个模拟程序,并不真正向服务发送请求,而代之以在一千万以内,每个线程每隔并发数个(cc个)打印一个整数。很明显,当所有线程都完成自己的任务后,进程会正常退出。但如果我们中途想退出(试想一个压力测试程序,在中途已经发现了问题,需要停止测试),该肿么办?你当然可以用ps查找到进程号,然后kill -9杀掉,但这样太繁琐了,捕捉Ctrl+C是最自然的想法。上面示例程序中已经捕捉了这个信号,并修改全局变量is_exit,线程中会检测这个变量,及时退出。

但事实上这个程序并不work,当你按下Ctrl+C时,程序照常运行,并无任何响应。网上搜了一些资料,明白是python的子线程如果不是daemon的话,主线程是不能响应任何中断的。但设为daemon后主线程会随之退出,接着整个进程很快就退出了,所以还需要在主线程中检测各个子线程的状态,直到所有子线程退出后自己才退出,因此上例29行之后的代码可以修改为:

重新试一下,问题依然没有解决,进程还是没有响应Ctrl+C,这是因为join()函数同样会waiting在一个锁上,使主线程无法捕获信号。因此继续修改,调用线程的isAlive()函数判断线程是否完成:

这样修改后,程序完全按照预想运行了:可以顺利的打印每个线程应该打印的所有数字,也可以中途用Ctrl+C终结整个进程。完整的代码如下:

其实,如果用python写一个服务,也需要这样,因为负责服务的那个线程是永远在那里接收请求的,不会退出,而如果你想用Ctrl+C杀死整个服务,跟上面的压力测试程序是一个道理。总结一下,python多线程中要响应Ctrl+C的信号以杀死整个进程,需要:

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

</div>

您可能想查找下面的文章:

  • Python中用Ctrl+C终止多线程程序的问题解决

相关文章

  • 约瑟夫问题的Python和C++求解方法
  • Windows中使用wxPython和py2exe开发Python的GUI程序的实例教程
  • 基于Python实现的扫雷游戏实例代码
  • python自定义类并使用的方法
  • 使用Python的Tornado框架实现一个一对一聊天的程序
  • Python捕捉和模拟鼠标事件的方法
  • python的描述符(descriptor)、装饰器(property)造成的一个无限递归问题分享
  • Python切片用法实例教程
  • Python学习之asyncore模块用法实例教程
  • 视觉直观感受若干常用排序算法

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • Python操作Excel之xlsx文件
    • python变量不能以数字打头详解
    • web.py在SAE中的Session问题解决方法(使用mysql存储)
    • python用于url解码和中文解析的小脚本(python url decoder)
    • 轻松实现python搭建微信公众平台
    • Python中SOAP项目的介绍及其在web开发中的应用
    • Python实现二维有序数组查找的方法
    • python每次处理固定个数的字符的方法总结
    • python在Windows8下获取本机ip地址的方法
    • Python使用Scrapy爬取妹子图

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有