精华内容
下载资源
问答
  • Python结束线程的方法

    千次阅读 2016-09-28 08:48:26
    Python结束线程的方法
    import inspect
    import ctypes
    
    def _async_raise(tid, exctype):
        if not inspect.isclass(exctype):
            exctype = type(exctype)
    
        res = ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, ctypes.py_object(exctype))
        if res == 0:
            raise ValueError("Invalid tid")
        elif res != 1:
            ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, None)
            raise RuntimeError("PyThreadState_SetAsyncExc failed")
    
    def stop_thread(thread):
        self._async_raise(thread.ident, SystemExit)

    以上代码由一个朋友提供~

    展开全文
  • python多线程结束线程Python threading module is used to implement multithreading in python programs. In this lesson, we will study about Thread and different functions of python threading module. ...

    python多线程结束线程

    Python threading module is used to implement multithreading in python programs. In this lesson, we will study about Thread and different functions of python threading module. Python multiprocessing is one of the similar module that we looked into sometime back.

    Python线程模块用于在python程序中实现多线程。 在本课程中,我们将研究Thread和python threading模块的不同功能。 Python多处理是我们前一段时间研究的类似模块之一。

    什么是线程? (What is a Thread?)

    In Computer Science, threads are defined as the smallest unit of work which is scheduled to be done by an Operating System.

    在《计算机科学》中,线程被定义为计划由操作系统完成的最小工作单元。

    Some points to consider about Threads are:

    有关线程的几点注意事项:

    • Threads exists inside a process.

      线程存在于进程内部。
    • Multiple threads can exist in a single process.

      一个进程中可以存在多个线程。
    • Threads in same process share the state and memory of the parent process.

      同一进程中的线程共享父进程的状态和内存。

    This was just a quick overview of Threads in general. This post will mainly focus on the threading module in Python.

    这只是一般的Thread的快速概述。 这篇文章将主要关注Python中的threading模块。

    Python线程 (Python threading)

    Let us introduce python threading module with a nice and simple example:

    让我们通过一个简单的好例子介绍python threading模块:

    import time
    from threading import Thread
    
    def sleepMe(i):
        print("Thread %i going to sleep for 5 seconds." % i)
        time.sleep(5)
        print("Thread %i is awake now." % i)
    
    for i in range(10):
        th = Thread(target=sleepMe, args=(i, ))
        th.start()

    When we run this script, the following will be the output:

    Python Threading Example, Python multithreading example

    当我们运行此脚本时,将输出以下内容:

    When you run this program, the output might be different as parallel threads doesn’t have any defined order of their life.

    当您运行此程序时,输出可能会有所不同,因为并行线程没有生命周期的任何已定义顺序。

    Python线程功能 (Python threading functions)

    We will reuse the last simple program we wrote with threading module and build up the program to show different threading functions.

    我们将重用使用threading模块编写的最后一个简单程序,并构建该程序以显示不同的线程功能。

    threading.active_count() (threading.active_count())

    This function returns the number of threads currently in execution. Let us modify the last script’s sleepMe(...) function. Our new script will look like:

    该函数返回当前正在执行的线程数。 让我们修改最后一个脚本的sleepMe(...)函数。 我们的新脚本如下所示:

    import time
    import threading
    from threading import Thread
    
    def sleepMe(i):
        print("Thread %i going to sleep for 5 seconds." % i)
        time.sleep(5)
        print("Thread %i is awake now." % i)
    
    for i in range(10):
        th = Thread(target=sleepMe, args=(i, ))
        th.start()
        print("Current Thread count: %i." % threading.active_count())

    This time, we will have a new output showing how many threads are active. Here is the output:

    Python multithreading example, python threading active count

    这次,我们将有一个新的输出,显示有多少线程处于活动状态。 这是输出:

    Note that active thread count, after all 10 threads has started is not 10 but 11. This is because it also counts the main thread inside from other 10 threads were spawned.

    请注意,在所有10个线程启动之后,活动线程数不是10而是11 。 这是因为它还计算生成的其他10个线程中的主线程。

    threading.current_thread() (threading.current_thread())

    This function returns the current thread in execution. Using this method, we can perform particular actions with the obtained thread. Let us modify our script to use this method now:

    该函数返回正在执行的当前线程。 使用此方法,我们可以对获得的线程执行特定的操作。 让我们修改脚本以立即使用此方法:

    import time
    import threading
    from threading import Thread
    
    def sleepMe(i):
        print("Thread %s going to sleep for 5 seconds." % threading.current_thread())
        time.sleep(5)
        print("Thread %s is awake now.\n" % threading.current_thread())
    
    #Creating only four threads for now
    for i in range(4):
        th = Thread(target=sleepMe, args=(i, ))
        th.start()

    The output of the above script will be:

    Python Threading Current Thread

    上面脚本的输出将是:

    threading.main_thread() (threading.main_thread())

    This function returns the main thread of this program. More threads can be spawned form this thread. Let us see this script:

    该函数返回该程序的主线程。 可以从该线程中产生更多线程。 让我们看一下这个脚本:

    import threading
    print(threading.main_thread())

    Now, let’s run this script:

    Python Main Thread

    现在,让我们运行以下脚本:

    As shown in the image, it is worth noticing that the main_thread() function was only introduced in Python 3. So take care that you use this function only when using Python 3+ versions.

    如图所示,值得注意的是main_thread()函数仅在Python 3中引入。因此请注意,仅在使用Python 3+版本时才使用此函数。

    threading.enumerate() (threading.enumerate())

    This function returns a list of all active threads. It is easy to use. Let us write a script to put it in use:

    此函数返回所有活动线程的列表。 它很容易使用。 让我们编写一个脚本来使用它:

    import threading
    for thread in threading.enumerate():
        print("Thread name is %s." % thread.getName())

    Now, let’s run this script:

    Python Threading Enumerate

    现在,让我们运行以下脚本:

    We were having only Main thread when we executed this script, hence the output.

    执行此脚本时只有主线程,因此只有输出。

    threading.Timer() (threading.Timer())

    This function of threading module is used to create a new Thread and letting it know that it should only start after a specified time. Once it starts, it should call the specified function. Let’s study it with an example:

    threading模块的此功能用于创建新的线程,并使其仅在指定时间后启动。 一旦启动,它应该调用指定的函数。 让我们用一个例子来研究它:

    import threading
    
    def delayed():
        print("I am printed after 5 seconds!")
    
    thread = threading.Timer(3, delayed)
    thread.start()

    Now, let’s run this script:

    Python Threading Timer

    现在,让我们运行以下脚本:

    Python多线程 (Python Multithreading)

    In this post, we saw some functions in the threading module in Python and how it provides convenient methods to control Threads in a multithreaded environment.

    在这篇文章中,我们看到了Python threading模块中的一些功能,以及它如何提供方便的方法来控制多线程环境中的线程。

    Reference: API Doc

    参考: API文档

    翻译自: https://www.journaldev.com/17290/python-threading-multithreading

    python多线程结束线程

    展开全文
  • python 强制结束线程

    万次阅读 2019-04-09 17:25:11
    总结一下网上关于结束线程的方法 1.通过threading.Thread._Thread__stop()结束线程 import time import threading def f(): while 1: time.sleep(0.1) print(1) t = threading.Thread(target=f) t.start() ...

    总结一下网上关于结束线程的方法

    1.通过threading.Thread._Thread__stop()结束线程

    import time
    import threading
    def f():
        while 1:
            time.sleep(0.1)
            print(1)
    
    
    t = threading.Thread(target=f)
    t.start()
    time.sleep(0.5)
    print("Stopping the thread")
    threading.Thread._Thread__stop(t)
    print("Stopped the thread")

    这个方法目前用python2能成功结束线程,用python3会报错。一下是分别用python2和python3运行的结果:

    python2:

    1
    1
    1
    1
    Stopping the thread
    Stopped the thread

    python3:

    1
    1
    1
    1
    Traceback (most recent call last):
      File "C:/work/1/reco/12月/tmp.py", line 64, in <module>
        threading.Thread._Thread__stop(t)
    AttributeError: type object 'Thread' has no attribute '_Thread__stop'
    Stopping the thread

    2.使用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(e):
        while 2:
            print(e)
    
    
    
    
    if __name__ == "__main__":
        t = threading.Thread(target=print_time,args=("2"))
        t.start()
        time.sleep(0.001)
        stop_thread(t)
        print("stoped")
        time.sleep(2)
        t1 = threading.Thread(target=print_time,args=("1"))
        t1.start()
        time.sleep(0.001)
        stop_thread(t1)
        print("stoped")
        while 1:
            pass

    python2和python3都能有效结束线程。

    展开全文
  • python threading 结束线程

    千次阅读 2019-11-21 17:14:07
    python threading 启动的线程,并没有提供终止线程的方法,现...1、通过threading.Thread._Thread__stop()结束线程 import time import threading def f(): while 1: time.sleep(0.1) print(1) t = thread...

    python threading 启动的线程,并没有提供终止线程的方法,现总结一下在网上找到的方法

    1、通过threading.Thread._Thread__stop()结束线程

    import time
    import threading
    def f():
        while 1:
            time.sleep(0.1)
            print(1)
     
     
    t = threading.Thread(target=f)
    t.start()
    time.sleep(0.5)
    print("Stopping the thread")
    threading.Thread._Thread__stop(t)
    print("Stopped the thread")
    
    
    # 运行结果python2
    1
    1
    1
    1
    Stopping the thread
    Stopped the thread
    
    # 运行结果 python3
    
    1
    1
    1
    1
    Traceback (most recent call last):
      File "C:/work/1/reco/12月/tmp.py", line 64, in <module>
        threading.Thread._Thread__stop(t)
    AttributeError: type object 'Thread' has no attribute '_Thread__stop'
    Stopping the thread
    

    Windows实验结果:python2时,p.isAlive()会报False,但实际进程并未结束。用python3会报错。

    2、使用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(e):
        while 2:
            print(e)
     
    
    if __name__ == "__main__":
        t = threading.Thread(target=print_time,args=("2"))
        t.start()
        time.sleep(0.001)
        stop_thread(t)
        print("stoped")
        time.sleep(2)
        t1 = threading.Thread(target=print_time,args=("1"))
        t1.start()
        time.sleep(0.001)
        stop_thread(t1)
        print("stoped")
        while 1:
            pass
    

    windows实测:python2 可以结束进程,python3未测。

    展开全文
  • python强制结束线程,socket通信引用python2结束线程python3结束线程python3测试代码 python2结束线程 import time import threading def f(): while 1: time.sleep(0.1) print 1 t = threading.Thread(target=...
  • python线程教程:python线程详解

    千次阅读 2020-02-03 11:49:20
    文章目录一、线程介绍二、线程实现threading模块自定义线程守护线程主线程等待子线程结束线程共享全局变量递归锁事件(Event类)三、GIL(Global Interpreter Lock)全局解释器锁 python线程详解 一、线程介绍 ...
  • Python线程

    2019-05-11 11:13:25
    目录简介Python线程模块Python创建线程Python2.xpython3.x线程的同步多线程实现同步的四种方式锁机制同步队列线程池多线程开销问题解决方案线程池要设置为多少协程 简介 关于线程和进程的概念 Python线程模块 ...
  • #如果线程内执行的是unittest模块的测试用例, 由于unittest内部又异常捕获处理,所有这个结束线程 #只能结束当前正常执行的unittest的测试用例, unittest的下一个测试用例会继续执行,只有结束继续 #向unittest...
  • Python 守护线程

    2017-09-08 10:40:46
    Python 守护线程
  • 主要介绍了Python线程:主线程等待所有子线程结束代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 我就废话不多说了,还是直接看代码吧!from time import ctimeimport threadingimport timedef a():#for i in range(5):print("Program a is running......线程名为:",threading.current_thread().name...
  • Python线程

    2015-12-01 20:59:35
    由于线程是操作系统直接支持的执行单元,因此,高级语言通常都内置多线程的支持,Python也不例外,并且,Python线程是真正的Posix Thread,而不是模拟出来的线程Python的标准库提供了两个模块:thread和...
  • 今天小编就为大家分享一篇浅谈PyQt5中异步刷新UI和Python线程总结,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 目前任务需要做一个界面程序,PyQt是非常方便的选择,QT丰富的控件以及python...
  • Python线程学习

    千次阅读 多人点赞 2019-05-10 22:32:10
    前言 在爬虫学习的过程中,一旦爬取的数量过大,很容易带来效率问题,为了能够快速爬取我们想要的内容。为此我们可以使用多线程或者...关于 Python线程有这样一句名言——“Python下多线程是鸡肋,推荐使用多进程...
  • python守护线程

    千次阅读 2018-10-14 17:35:16
    如果python线程是守护线程,那么以为着这个线程是“不重要”的,“不重要”意味着如果他的父进程结束了但该守护线程没有运行完,守护进程就会被强制结束。如果线程是非守护线程,那么父进程只有等到守护线程运行完毕...
  • python线程

    2015-04-14 11:30:42
    由于线程是操作系统直接支持的执行单元,因此,高级语言通常都内置多线程的支持,Python也不例外,并且,Python线程是真正的Posix Thread,而不是模拟出来的线程Python的标准库提供了两个模块:thread和...
  • python线程

    千次阅读 2019-11-06 09:19:06
    python的thread模块是比较底层的模块,python的threading模块是对thread做了一些包装的,可以更加方便的被使用 实现线程的方法 使用threading模块 import threading import time # 注意:在写循环的时候for i ...
  • Python线程实例

    千次阅读 2018-11-03 18:11:47
    Python线程的实现和原理 线程与进程 线程是进程内一个执行单元,也是进程内的可调度实体。 线程与进程的区别: 地址空间,进程独立空间,线程共享进程内的地址空间 资源分配,进程是系统资源调度及分派的基本单位...
  • 我们进行程序开发的时候,肯定避免不了要处理并发的情况。...本文基于 Python3 讲解,Python 实现多线程编程需要借助于 threading 模块。 所以,我们要在代码中引用它。 import threading thread...
  • Pythonpython线程编程

    千次阅读 2015-06-09 10:13:11
    说起多线程,必然想到了进程、锁等东西,python线程有关的模块有thread模块、threading模块、Queue模块、mutex模块、SocketServer模块。thread模块提供了基本的线程和锁的支持,但不建议使用,因为当主线程退出的...
  • Python线程 multithread

    千次阅读 2015-07-29 12:47:30
    Pythonpython线程两种实现方式 目前python提供了几种多线程实现方式 thread,threading,multithreading ,其中thread模块比较底层,而threading模块是对thread做了一些包装,可以更加方便的被使用。 2.7...
  • Python线程操作

    万次阅读 多人点赞 2018-07-08 22:48:02
    Python线程操作 什么是线程线程(Thread)也叫轻量级进程,是操作系统能够进行运算调度的最小单位,它被包涵在进程之中,是进程中的实际运作单位。线程自己不拥有系统资源,只拥有一点儿在运行中必不可少...
  • Python线程threading用法

    千次阅读 2017-08-01 11:16:15
    python线程threading实例讲解
  • Python线程是多鸡肋

    千次阅读 2016-11-29 11:52:16
    摘要:Python 对并行化支持的名声就不是很好,如果你用过 Python 自带的线程库 thread 和 threading,你应该知道 Python 线程其实并不好用。例如:没有自带的获取线程返回值的方法,需要自己重写自己的threading。...
  • 进程和线程 一、进程 进程是程序的分配资源的最小单元;一个程序可以有多个进程,但只有一个主进程;进程由程序、数据集、控制器三部分组成。 二、线程 线程是程序最小的执行单元;一个进程可以有多个线程,但是只有...
  • 小试Python线程

    2015-01-05 22:09:41
    Python线程相比其它语言实现起来要简单一点。最近做的工作是使用多线程将多个文件上传至新浪微盘。下面简要总结一下Python的多线程知识。 一、Python线程知识 1. threading模块。 threading模块提供了各种非常好...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 70,600
精华内容 28,240
关键字:

python结束线程

python 订阅