解决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实现的可以拷贝或剪切一个文件列表中的所有文件
Apr 30 Python
python自动安装pip
Apr 24 Python
python获取指定网页上所有超链接的方法
Apr 04 Python
举例详解Python中的split()函数的使用方法
Apr 07 Python
Python基于递归实现电话号码映射功能示例
Apr 13 Python
Python+pyplot绘制带文本标注的柱状图方法
Jul 08 Python
Python中os模块功能与用法详解
Feb 26 Python
SpringBoot实现登录注册常见问题解决方案
Mar 04 Python
python函数调用,循环,列表复制实例
May 03 Python
Python实现文本文件拆分写入到多个文本文件的方法
Apr 18 Python
python geopandas读取、创建shapefile文件的方法
Jun 29 Python
Python集合set()使用的方法详解
Mar 18 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 redis实现文章发布系统(用户投票系统)
2017/03/04 PHP
javascript 原型模式实现OOP的再研究
2009/04/09 Javascript
JavaScript学习笔记(十)
2010/01/17 Javascript
30个精美的jQuery幻灯片效果插件和教程
2011/08/23 Javascript
ASP.NET jQuery 实例6 (实现CheckBoxList成员全选或全取消)
2012/01/13 Javascript
JQuery实现用户名无刷新验证的小例子
2013/03/22 Javascript
jQuery 删除/替换DOM元素的几种方式
2014/05/20 Javascript
JavaScript检测弹出窗口是否已经关闭的方法
2015/03/24 Javascript
javascript实现汉字转拼音代码分享
2015/04/20 Javascript
浅析AngularJS中的生命周期和延迟处理
2015/06/18 Javascript
js闭包所用的场合以及优缺点分析
2015/06/22 Javascript
Bootstrap实现弹性搜索框
2016/07/11 Javascript
AngularJS包括详解及示例代码
2016/08/17 Javascript
jQuery中ScrollTo用法示例
2016/09/04 Javascript
bootstrap模态框跳转到当前模板页面 框消失了而背景存在问题的解决方法
2020/11/30 Javascript
浅谈JavaScript正则表达式-非捕获性分组
2017/03/08 Javascript
jQuery实现的手风琴侧边菜单效果
2017/03/29 jQuery
解决vue组件中使用v-for出现告警问题及v for指令介绍
2017/11/11 Javascript
浅析JS中回调函数及用法
2018/07/25 Javascript
vue修改对象的属性值后页面不重新渲染的实例
2018/08/09 Javascript
从vue源码看props的用法
2019/01/09 Javascript
js 递归json树实现根据子id查父id的方法分析
2019/11/08 Javascript
JavaScript 中的执行上下文和执行栈实例讲解
2021/02/25 Javascript
在Python的Django框架中实现Hacker News的一些功能
2015/04/17 Python
python提取图像的名字*.jpg到txt文本的方法
2018/05/10 Python
Django高并发负载均衡实现原理详解
2020/04/04 Python
python3 配置logging日志类的操作
2020/04/08 Python
python名片管理系统开发
2020/06/18 Python
python修改微信和支付宝步数的示例代码
2020/10/12 Python
python 基于opencv 绘制图像轮廓
2020/12/11 Python
德国帽子专家:Hutshopping
2019/11/03 全球购物
CHARLES & KEITH加拿大官网:新加坡时尚品牌
2020/03/26 全球购物
党员培训思想汇报
2014/01/07 职场文书
大学毕业自我评价
2014/02/02 职场文书
五型班组建设方案
2014/02/10 职场文书
python制作图形界面的2048游戏, 基于tkinter
2021/04/06 Python