精华内容
下载资源
问答
  • python threading 结束线程
    千次阅读
    2021-10-24 14:58:58
    import time
    from threading import Thread
    
    '''
    多线程 控制线程退出方法
    
    主线程启动多线程,若主线程退出则关闭启动的多线程
    设置主线程的属性daemon = 1
    主线程循环状态保持运行,并判断变量self.flag状态,用于退出标识
    '''
    class Abc:
        #定义一个变量
        def __init__(self):
            self.flag = 111
    
        #要在后台运行的任务
        def test(self):
            while 1:
                time.sleep(5)
    
        #主程序,持续运行判断self.flag状态用以跳出循环退出,运行的多线程也一起退出
        def run(self):
            t = Thread(target=self.test)
            t.daemon = 1
            t.start()
            while 1:
                self.flag = 222
                if self.flag == 222:
                    print('flag is {},main process exit'.format(self.flag))
                    break
    
    if __name__ == '__main__':
        abc = Abc()
        abc.run()

    更多相关内容
  • 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中启动和关闭线程: 首先导入threading import threading 然后定义一个方法 def serial_read(): … … 然后定义线程,target指向要执行的方法 myThread = threading.Thread(target=serial_read) 启动...
  • Python-threading:线程

    2020-12-21 21:27:06
    全局解释器锁(GTL):python代码的执行是由python虚拟机进行控制, 在主循环中只能有一个控制线程在执行 一个进程的独立运行片段,一个进程里面可以有多个线程线程之间的执行顺序是无序的 一个进程的多个线程间共享...
  • Python3-Threading之终止线程方法

    千次阅读 2020-11-24 02:12:00
    #-*-coding:utf-8-*-import threadingimport timeimport inspectimport ctypesdef _async_raise(tid, exctype):"""raises the exception, performs cleanup if needed"""tid = ctypes.c_long(tid)if not inspect.isc...

    #-*-coding:utf-8-*-

    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 hello():

    while 1:

    print('Hello ituser!')

    time.sleep(1)

    if __name__ == "__main__":

    t = threading.Thread(target=hello)

    t.start()

    #终止

    stop_thread(t)

    print("stoped")

    while 1:

    pass

    本文隐藏内容 登陆 后才可以浏览

    分享到:

    展开全文
  • 1. 线程的概念:线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一...2. threading.th...

    1. 线程的概念:

    线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。

    2. threading.thread()的简单使用

    2.1 python的thread模块是比较底层的模块,python的threading模块是对thread做了一些包装的,可以更加方便的被使用

    import threading

    import time

    def saySorry():

    print("亲爱的,我错了,我能吃饭了吗?")

    time.sleep(1)

    if __name__ == "__main__":

    for i in range(5):

    t = threading.Thread(target=saySorry)

    t.start() #启动线程,即让线程开始执行

    运行结果:

    2019121714184459.png

    使用说明:

    可以明显看出使用了多线程并发的操作,花费时间要短很多

    当调用start()时,才会真正的创建线程,并且开始执行

    每个线程都有一个唯一标示符,来区分线程中的主次关系

    主线程:mainThread,Main函数或者程序主入口,都可以称为主线程

    子线程:Thread-x 使用 threading.Thread() 创建出来的都是子线程

    线程数量:主线程数 + 子线程数

    2.2 主线程会等待所有的子线程结束后才结束

    import threading

    from time import sleep,ctime

    def sing():

    for i in range(3):

    print("正在唱歌...%d"%i)

    sleep(1)

    def dance():

    for i in range(3):

    print("正在跳舞...%d"%i)

    sleep(1)

    if __name__ == '__main__':

    print('---开始---:%s'%ctime())

    t1 = threading.Thread(target=sing)

    t2 = threading.Thread(target=dance)

    t1.start()

    t2.start()

    #sleep(5) # 屏蔽此行代码,试试看,程序是否会立马结束?

    print('---结束---:%s'%ctime())

    2019121714184460.png

    3.查看线程数量

    import threading

    from time import sleep,ctime

    def sing():

    for i in range(3):

    print("正在唱歌...%d"%i)

    sleep(1)

    def dance():

    for i in range(3):

    print("正在跳舞...%d"%i)

    sleep(1)

    if __name__ == '__main__':

    print('---开始---:%s'%ctime())

    t1 = threading.Thread(target=sing)

    t2 = threading.Thread(target=dance)

    t1.start()

    t2.start()

    while True:

    length = len(threading.enumerate())

    print('当前运行的线程数为:%d'%length)

    if length<=1:

    break

    sleep(0.5)

    2019121714184461.png

    4.线程参数及顺序

    4.1 传递参数的方法:

    使用args 传递参数 threading.Thread(target=sing, args=(10, 100, 100))

    使用kwargs传递参数 threading.Thread(target=sing, kwargs={“a”: 10, “b”:100, “c”: 100})

    同时使用 args 和 kwargs 传递参数 threading.Thread(target=sing, args=(10, ), kwargs={“b”: 100,“c”: 100})

    4.2 线程的执行顺序

    import socket

    import threading

    import time

    def sing():

    for i in range(10):

    print("------------------------------")

    time.sleep(0.5)

    def dance():

    for i in range(10):

    print("-----")

    time.sleep(0.5)

    if __name__ == '__main__':

    # 创建两个子线程

    t1 = threading.Thread(target=sing)

    t2 = threading.Thread(target=dance)

    # 启动子线程

    t1.start()

    t2.start()

    说明:

    从代码和执行结果我们可以看出,多线程程序的执行顺序是不确定的。当执行到sleep语句时,线程将被阻塞(Blocked),到sleep结束后,线程进入就绪(Runnable)状态,等待调度。而线程调度将自行选择一个线程执行。上面的代码中只能保证每个线程都运行完整个run函数,但是线程的启动顺序、run函数中每次循环的执行顺序都不能确定。

    5. 守护线程

    守护线程:如果在程序中将子线程设置为守护线程,则该子线程会在主线程结束时自动退出,设置方式为thread.setDaemon(True),要在thread.start()之前设置,默认是false的,也就是主线程结束时,子线程依然在执行。

    5.1 如下代码,主线程已经exit() 【其实并没有真正结束】,子线程还在继续执行

    import threading

    import time

    def test():

    for i in range(10):

    print("test is run:", i)

    time.sleep(1)

    if __name__ == '__main__':

    # 创建子线程

    t1 = threading.Thread(target=test)

    # 启动子线程

    t1.start()

    # 休眠2秒

    time.sleep(2)

    print("我 OVER 了")

    # 退出

    exit()

    2019121714184462.png

    5.2 设置守护线程

    设置为守护线程(如果主线程结束了,也随之结束)

    线程.setDaemon(True)

    2019121714184463.png

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

    本文标题: python中的线程threading.Thread()使用详解

    本文地址: http://www.cppcns.com/jiaoben/python/293406.html

    展开全文
  • python当前版本的多线程库没有实现优先级、线程组,线程也不能被停止、暂停、恢复、中断。 threading模块提供的类:   Thread, Lock, Rlock, Condition, [Bounded]Semaphore, Event, Timer, local。 threading ...
  • import threading import inspect import ctypes def _async_raise(tid, exctype): """raises the exception, performs cleanup if needed""" if not inspect.isclass(exctype): exctype = type(exctype) res ...
  • 线程暂停、恢复、停止见注释 obj-T1-0 obj-T2-0 main 0 obj-T1-1 obj-T2-1 obj-T2-2 main 1 obj-T1-2 obj-T1-3 obj-T2-3 main 2 obj-T1-4 obj-T2-4 obj-T2-5 obj-T1-5 暂停1 # main 2时暂停线程T1 ...
  • threading模块是Python里面常用的线程模块,多线程处理任务对于提升效率非常重要,先说一下线程和进程的各种区别,如图概括起来就是IO密集型(不用CPU)多线程计算密集型(用CPU)多进程使用线程和进程的目的都是...
  • 主要介绍了判断Threading.start新线程是否执行完毕的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • python 结束线程
  • python的thread线程终止

    千次阅读 2022-04-22 09:50:28
    提示:python中没有关于thread的stop相关操作: 线程终止代码 def _async_raise(self,tid, exctype): """raises the exception, performs cleanup if needed""" if not inspect.isclass(exctype): exctype = ...
  • python如何结束线程

    千次阅读 2020-11-21 03:05:53
    A boolean value indicating whether this thread is a daemon thread (True) or not (False). This must be set before start() is ... The entire Python program exits when no alive non-daemon threads are left.
  • 主要介绍了pythonthreading中如何处理主进程和子线程的关系,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • pythonthreading开启关闭线程

    万次阅读 多人点赞 2019-06-22 09:32:46
    python中启动和关闭线程: 一、启动线程 首先导入threading import threading 然后定义一个方法 def serial_read(): ... ... 然后定义线程,target指向要执行的方法 myThread = threading.Thread(target=...
  • python-Threading线程线程

    千次阅读 2020-12-08 22:14:58
    Threading线程线程锁 这里先说一下加锁的机制,其是如何实现线程保护的。这个实现的大致过程为:首先在需要同步的代码块前面加上lock.acquire()语句,表示需要先成功获取该锁,才能继续执行下面的代码,然后在...
  • Pythonthreading 本身没有提供.kill()方法来结束线程。但是只需要一个小小的变通就可以实现。一个caller线程在里面调用需要控制时间的tHhandle线程并把tHhandle线程设置.setDaemon()方法为True。caller线程结束,...
  • python线程threading详解
  • Python中,线程threading详解

    千次阅读 2021-10-23 21:13:44
    threading.Lock同步锁(原语锁) 通常使用获得锁(加锁)和释放锁(解锁)函数来控制锁的两种状态,在Python中,只需要在公共操作中加上加锁和解锁的操作即可。 如“加锁”和“解锁“操作 通过lock.acquire()获得锁...
  • 我就废话不多说了,还是直接看代码吧!from time import ctimeimport threadingimport timedef a():#for i in range(5):print('Program a is ...线程名为:',threading.current_thread().name )time.sleep(0.2)def...
  • python线程线程threading库常用方法thread类继承thread类全局变量的问题不加线程锁添加线程锁Lock(线程同步)queue线程安全队列 多线程线程(按序列并发执行) #mermaid-svg-1mBkHgaMG5Tm8N85 .label{font-...
  • python怎样终止线程

    千次阅读 2021-02-04 09:15:36
    python中启动和关闭线程:一、启动线程首先导入threadingimport threading然后定义一个方法def serial_read():......然后定义线程,target指向要执行的方法myThread = threading.Thread(target=serial_read)启动它...
  • Python Threading线程之 print

    千次阅读 2018-07-28 10:57:47
    Python Threading线程之 print   在实例中,发现一个关于print的问题,尚未得到答案,记录下来,等待答案揭晓的一天   代码1实例代码: # coding:utf-8 import threading import time def action(arg):...
  • 当没有存活的非守护进程时,整个python程序才会退出。 总结: 如果主线程执行完以后,还有其他非守护线程,主线程是不会退出的,会被无限挂起;必须将线程声明为守护线程之后,如果队列中的数据运行完了,那么整个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 24,062
精华内容 9,624
关键字:

python threading 结束线程