Python退出主进程后子线程不会退出的解决方案


Python退出主进程后子线程不会退出的解决方案

Python中使用了子线程,主线程代码执行完毕后,由于子线程用了无限循环,导致主线程退出后,子线程还在运行

Python退出主进程后子线程不会退出

解决方案:

无效方案:代码结尾处增加代码

Python 全选
sys.exit()

无效方案:代码结尾处增加os._exit()

Python 全选
os._exit()

原因

Python中threading模块并没有设计线程退出的机制,原因是不正常的线程退出可能会引发意想不到的后果。

例如:

线程正在持有一个必须正确释放的关键资源,锁。

线程创建的子线程,同时也将被杀掉。

管理自己的线程,最好的处理方式是拥有一个请求退出标志,这样每个线程依据一定的时间间隔检查规则,看是不是需要退出。

例如下面的代码:

Python 全选
import threading
class StoppableThread(threading.Thread):
  """Thread class with a stop() method. The thread itself has to check
  regularly for the stopped() condition."""
 
  def __init__(self):
    super(StoppableThread, self).__init__()
    self._stop_event = threading.Event()
 
  def stop(self):
    self._stop_event.set()
 
  def stopped(self):
    return self._stop_event.is_set()

 

正确的做法

Python退出主进程后子线程不会退出

Python 全选
class CookieRefreshThread(Thread):
    run = True

    def __init__(self):
        Thread.__init__(self)

    def run(self):
        while self.run:
            # dosoming()
            time.sleep(2)

    def myStop(self):
        self.run = False

添加了一个myStop 方法,用来退出子线程的while循环

然后主线程退出前,调用 线程的myStop方法

Python 全选
# 开启子线程
t_cookie_listen = CookieRefreshThread(self)
t_cookie_listen.start()

# 做主线程该做的事情

# 主线程执行完毕了,该退出了,先退出子线程
t_cookie_listen.myStop()
版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
管理员
上一篇:百度搜索结果列表html元素分析
下一篇:H5页面兼容苹果手机顶部刘海和底部的安全黑条区域
评论列表

发表评论

评论内容
昵称:
关联文章

Python退出进程线退出解决方案
winform应用退出彻底解决办法
Python线中试用wmi报错
C# 多线入门系列(二)
C# 多线入门系列(三)
C# 多线入门系列(一)
.Net 线安全集合
winform MDI窗口打开闪动问题
SQLite Database 多线访问需要注意问题
ManualResetEvent实现线暂停与恢复
服务器安全:限制外网访问解决方案
win10开始菜单图标显示正常,解决方案
SourceGenerator应用: .Net多进程开发库 - Juxtapose
表结构修改>新增键或者能为空
windows平台分布式微服务解决方案(5)--Web服务/WebApi负载均衡
Python使用UUID模块云服务器上获取MAC地址,重启一样了
debugger浏览器触发断点
VSCode无法格式化python代码py文件解决办法
C#文件流Stream转数组Byte[]失败解决方案
git仓库模块(submodule)项目中实战应用

联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码