iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >如何杀死一个python的线程
  • 836
分享到

如何杀死一个python的线程

线程python 2023-01-31 06:01:42 836人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

“不要试图用强制方法杀掉一个python线程,这从服务设计上就存在不合理性。 多线程本用来任务的协作并发,如果你使用强制手段干掉线程,那么很大几率出现意想不到的bug。” 话虽然这样说,但是有时候就有这样的需求,可以Python本身没有提

“不要试图用强制方法杀掉一个python线程,这从服务设计上就存在不合理性。 多线程本用来任务的协作并发,如果你使用强制手段干掉线程,那么很大几率出现意想不到的bug。”

话虽然这样说,但是有时候就有这样的需求,可以Python本身没有提供这样的api,所以没办法在网上找了一圈,发现了两种方法。如下:

方法一:

利用setDaemon(True)这个函数的特性,特性如下:主线程A中,创建了子线程B,并且在主线程A中调用了B.setDaemon(),这个的意思是,把主线程A设置为守护线程,这时候,要是主线程A执行结束了,就不管子线程B是否完成,一并和主线程A退出。

但是如果要做到主线程不结束,但还是要强行结束子线程。所以我就突发奇想,如果我把要杀死的子线程看做是孙线程,给一个标志位给子线程,主线程改变标志位,子线程检查到就break自己,这样孙线程不就结束了,主线程仍在运行。然而,想法很美好。。。先上代码。

import threading

flag = 0
# 为线程定义一个函数
def print_time():
   def printOne():
      while 1:
         print(111111111111)
         print(222222222222)
         print(333333333333)
         print(444444444444)
         print(555555555555)
         print(666666666666)
   th1 = threading.Thread(target=printOne)
   th1.setDaemon(True)
   th1.start()
   while 1:
      if flag:
         print("正在停止这个程序!!!")
         break
i=5
if i == 5:
      th = threading.Thread(target=print_time)
      th.start()
      flag=1
      th.join()
      print("++++++++++++++++++++++++++++++++++++++++++++++++++")
while 1:
   pass

执行代码,会发现孙线程并没有结束。很简单,因为孙线程它会等主线程结束,它才结束。去掉最后两行代码,孙线程就会结束,但这也是等主线程结束的。所以方法一不满足需求。

方法二:

使用ctypes强行杀掉线程。

import threading
import time
import inspect
import ctypes

def _async_raise(tid, exctype):
    """raises the exception, perfORMs cleanup if needed"""
    tid = ctypes.c_long(tid)
    if not inspect.isclass(exctype):
        exctype = type(exctype)
    res = ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, ctypes.py_object(exctype))
    if res == 0:
        raise ValueError("invalid thread id")
    elif res != 1:
        # """if it returns a number greater than one, you're in trouble,
        # and you should call it again with exc=NULL to revert the effect"""
        ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, None)
        raise SystemError("PyThreadState_SetAsyncExc failed")

def stop_thread(thread):
    _async_raise(thread.ident, SystemExit)

def print_time():
    while 2:
         print(111111111111)
         print(222222222222)
         print(333333333333)
         print(444444444444)
         print(555555555555)
         print(666666666666)


if __name__ == "__main__":
    t = threading.Thread(target=print_time)
    t.start()

    stop_thread(t)
    print("stoped")
    while 1:
        pass
这个方法是在网上找的,推荐一下,非常干净利索的干掉了子线程。

--结束END--

本文标题: 如何杀死一个python的线程

本文链接: https://www.lsjlt.com/news/189368.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何杀死一个python的线程
    “不要试图用强制方法杀掉一个python线程,这从服务设计上就存在不合理性。 多线程本用来任务的协作并发,如果你使用强制手段干掉线程,那么很大几率出现意想不到的bug。” 话虽然这样说,但是有时候就有这样的需求,可以python本身没有提...
    99+
    2023-01-31
    线程 python
  • 如何在Linux命令行下杀死一个进程
    这篇文章主要介绍了如何在Linux命令行下杀死一个进程,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。定位进程杀死一个没有响应的进程的***个步骤是定位这个进程。我用来定位进程...
    99+
    2023-06-16
  • 如何杀死redis进程
    在redis中杀死进程的方法:1.命令行启动redis;2.redis服务端;3.执行“ps -ef|grep redis”命令查看进程;4.使用kill命令杀死进程;在redis中杀死进程的方法首先,在计算机命令行中启动redis;red...
    99+
    2024-04-02
  • 如何批量杀死MySQL进程
    这期内容当中小编将会给大家带来有关如何批量杀死MySQL进程,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。 杀掉当前所有的MySQL连接方法...
    99+
    2024-04-02
  • Linux如何查看进程并杀死进程?
    一、Linux查看进程命令 PS命令:     ps命令是一个相当强大地Linux进程查看命令,运用该命令可以确定有哪些进程正在运行和运行地状态、 进程是否结束、进程有没有僵死、哪些进程占用了过多地资源等。总之大部分信息均为可以通过执行该命...
    99+
    2023-08-31
    linux 运维 服务器
  • linux如何查看进程号并杀死进程
    这篇文章给大家分享的是有关linux如何查看进程号并杀死进程的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。什么是Linux系统Linux是一种免费使用和自由传播的类UNIX操作系统,是一个基于POSIX的多用户、...
    99+
    2023-06-15
  • linux杀死进程命令kill如何使用
    本篇内容介绍了“linux杀死进程命令kill如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2023-01-05
    linux kill
  • Linux如何查找占用的端口并杀死进程
    这篇文章主要介绍Linux如何查找占用的端口并杀死进程,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!我要使用4040端口,但是被其他的程序占用了1. 查找占用的程序netstat -apn | grep 4040 最...
    99+
    2023-06-12
  • vbs如何实现杀死指定进程名称
    这篇文章将为大家详细讲解有关vbs如何实现杀死指定进程名称,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Function KillProc(strProcName)On Error&n...
    99+
    2023-06-08
  • Java项目有中多个线程如何查找死锁
    当项目有中多个线程,如何查找死锁? 最近,在IDEA上进行多线程编程中老是在给线程加锁的时候,总是会遇到死锁问题,而当程序出现死锁问题时,编译器不能精确的显示错误的精确位置。当项目代...
    99+
    2024-04-02
  • Linux系统中如何查看并杀死僵尸进程
    这篇文章主要为大家展示了Linux系统中如何查看并杀死僵尸进程,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带大家一起来研究并学习一下“Linux系统中如何查看并杀死僵尸进程”这篇文章吧。僵尸进程是指一个已经终止、但是其父进...
    99+
    2023-06-28
  • 如何避多线程产生死锁
    这篇文章将为大家详细讲解有关如何避多线程产生死锁,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、死锁的定义多线程以及多进程改善了系统资源的利用率并提高了系统 的处理能力。然而,并发执行也带...
    99+
    2023-05-31
    多线程 死锁
  • java多线程死锁如何解决
    Java中死锁的解决办法有以下几种:1. 避免使用多个锁:当多个线程需要获取多个锁时,可以尝试将多个锁合并为一个锁,或者将一个锁拆分...
    99+
    2023-08-24
    java
  • Python中如何实现一个线程安全的缓存对象
    Python中如何实现一个线程安全的缓存对象随着多线程编程在Python中的越来越被广泛应用,线程安全性变得愈发重要。在并发环境中,多个线程同时读写共享资源时,可能会导致数据不一致或者意外的结果。为了解决这个问题,我们可以使用线程安全的缓存...
    99+
    2023-10-22
    线程安全 缓存对象 Python 实现
  • python中如何写一个线性函数
    在python中书写一个线性函数,具体方法如下:def temp1(datas):x = datas[0] #获取自变量xy = datas[1] #获取因变量yn = np.size(answer1, axis = 1) #获取有多少个自...
    99+
    2024-04-02
  • Linux系统中如何查看并且杀死僵尸进程
    小编给大家分享一下Linux系统中如何查看并且杀死僵尸进程,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!僵尸进程就是是指一个已经终止、但是其父进程尚未对其进行善后处理获取终止进程的有关信息的进程,这个进程被称为“僵尸进程”...
    99+
    2023-06-28
  • 如何暂停一个正在运行的线程
    要暂停一个正在运行的线程,可以使用Thread类的`suspend()`方法将线程挂起,然后使用`resume()`方法恢复线程的执...
    99+
    2023-09-28
    线程
  • java线程卡死问题如何排查
    java线程卡死问题的排查可以遵循以下步骤:1. 查看线程堆栈:使用jstack命令或者在IDE中查看线程堆栈,定位到卡死的线程。查...
    99+
    2023-08-24
    java
  • 用Python实现一个简单的线程池
    线程池的概念是什么?在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源。在Java中更是 如此,虚拟机将试图跟踪每一个对象,以便能够在对象销毁后进行垃圾回收。所以提高服务程序效率的一个手段就是尽可能...
    99+
    2023-01-31
    线程 简单 Python
  • vue如何设计一个倒计时秒杀的组件
    这篇文章将为大家详细讲解有关vue如何设计一个倒计时秒杀的组件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。简介:倒计时秒杀组件在电商网站中层出不穷  不过思路...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作