解决python父线程关闭后子线程不关闭问题


Posted in Python onApril 25, 2020

我们都知道,python可以通过threading module来创建新的线程,然而在创建线程的线程(父线程)关闭之后,相应的子线程可能却没有关闭,这可能是因为代码中没有使用setDaemon(True)函数。

接下来,使用一个例子来说明:

import threading

def prt_hello() :
  while 1 :
    print 'hello'

if __name__ == '__main__' :
  t = threading.Thread(target=prt_hello)
  t.setDaemon(True)
  t.start()

我们需要把setDaemon函数放在start函数前面,不然它是不给通过的,并且返回'cannot set daemon status of active thread‘

补充知识:Python 多线程的退出/停止的一种是实现思路

在使用多线程的过程中,我们知道,python的线程是没有stop/terminate方法的,也就是说它被启动后,你无法再主动去退出它,除非主进程退出了,注意,是主进程,不是线程的父进程.

一个比较合理的方式就是把原因需要放到threading.Thread的target中的线程函数,改写到一个继承类中,下面是一个实现例子

import threading
import time
import os
 
# 原本需要用来启动的无线循环的函数
def print_thread():
  pid = os.getpid()
  counts = 0
  while True:
    print(f'threading pid: {pid} ran: {counts:04d} s')
    counts += 1
    time.sleep(1)
 
# 把函数放到改写到类的run方法中,便可以通过调用类方法,实现线程的终止
class StoppableThread(threading.Thread):
 
  def __init__(self, daemon=None):
    super(StoppableThread, self).__init__(daemon=daemon)
    self.__is_running = True
    self.daemon = daemon
 
  def terminate(self):
    self.__is_running = False
 
  def run(self):
    pid = os.getpid()
    counts = 0
    while self.__is_running:
      print(f'threading running: {pid} ran: {counts:04d} s')
      counts += 1
      time.sleep(1)
 
 
def call_thread():
  thread = StoppableThread()
  thread.daemon = True
  thread.start()
 
  pid = os.getpid()
  counts = 0
  for i in range(5):
    print(f'0 call threading pid: {pid} ran: {counts:04d} s')
    counts += 2
    time.sleep(2)
  # 主动把线程退出
  thread.terminate()
 
 
if __name__ == '__main__':
  call_thread()
  print(f'==========call_thread finish===========')
  counts = 0
  for i in range(5):
    counts += 1
    time.sleep(1)
    print(f'main thread:{counts:04d} s')

以上这篇解决python父线程关闭后子线程不关闭问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
简单谈谈Python中的几种常见的数据类型
Feb 10 Python
Python实现的手机号归属地相关信息查询功能示例
Jun 08 Python
详解Python3.6安装psutil模块和功能简介
May 30 Python
Python设计模式之适配器模式原理与用法详解
Jan 15 Python
python开头的coding设置方法
Aug 08 Python
python实现多进程通信实例分析
Sep 01 Python
ubuntu上安装python的实例方法
Sep 30 Python
解决python gdal投影坐标系转换的问题
Jan 17 Python
深入浅析Python 函数注解与匿名函数
Feb 24 Python
谈谈Python:为什么类中的私有属性可以在外部赋值并访问
Mar 05 Python
python按照list中字典的某key去重的示例代码
Oct 13 Python
Python+OpenCV图像处理——实现轮廓发现
Oct 23 Python
Python标准库:内置函数max(iterable, *[, key, default])说明
Apr 25 #Python
python except异常处理之后不退出,解决异常继续执行的实现
Apr 25 #Python
python 追踪except信息方式
Apr 25 #Python
Python实现捕获异常发生的文件和具体行数
Apr 25 #Python
python IDLE添加行号显示教程
Apr 25 #Python
IDLE下Python文件编辑和运行操作
Apr 25 #Python
python 字典item与iteritems的区别详解
Apr 25 #Python
You might like
常见的PHP五种设计模式小结
2011/03/23 PHP
示例详解Laravel重置密码代码重构
2016/08/10 PHP
PHP+Session防止表单重复提交的解决方法
2018/04/09 PHP
php设计模式之代理模式分析【星际争霸游戏案例】
2020/03/23 PHP
模仿JQuery sortable效果 代码有错但值得看看
2009/11/05 Javascript
jquery+json 通用三级联动下拉列表
2010/04/19 Javascript
js href的用法
2010/05/13 Javascript
Javascript下IE与Firefox下的差异兼容写法总结
2010/06/18 Javascript
js继承的实现代码
2010/08/05 Javascript
jQuery数组处理代码详解(含实例演示)
2012/02/03 Javascript
jQuery判断元素是否存在的可靠方法
2014/05/06 Javascript
一个实用的图片切换支持点击切换和自动轮播
2014/09/09 Javascript
Jquery日期选择datepicker插件用法实例分析
2015/06/08 Javascript
JavaScript的RequireJS库入门指南
2015/07/01 Javascript
详解AngularJs中$sce与$sceDelegate上下文转义服务
2016/09/21 Javascript
javascript中活灵活现的Array对象详解
2016/11/30 Javascript
原生JS实现左右箭头选择日期实例代码
2017/03/14 Javascript
react-router实现跳转传值的方法示例
2017/05/27 Javascript
微信小程序实现之手势锁功能实例代码
2018/07/19 Javascript
vue项目设置scrollTop不起作用(总结)
2018/12/21 Javascript
js实现京东秒杀倒计时功能
2019/01/21 Javascript
详解JavaScript中的坐标和距离
2019/05/27 Javascript
Vue 实现复制功能,不需要任何结构内容直接复制方式
2019/11/09 Javascript
vue在路由中验证token是否存在的简单实现
2019/11/11 Javascript
Python3 操作符重载方法示例
2017/11/23 Python
Python requests发送post请求的一些疑点
2018/05/20 Python
pytorch中tensor的合并与截取方法
2018/07/26 Python
python3的print()函数的用法图文讲解
2019/07/16 Python
django框架使用方法详解
2019/07/18 Python
Python基于codecs模块实现文件读写案例解析
2020/05/11 Python
pycharm 的Structure界面设置操作
2021/02/05 Python
美团网旗下网上订餐平台:美团外卖
2020/03/05 全球购物
汽车专业大学生职业生涯规划范文
2014/01/07 职场文书
承认错误的检讨书
2014/01/30 职场文书
《大江保卫战》教学反思
2014/04/11 职场文书
2019旅游导游工作总结
2019/06/27 职场文书