zoukankan      html  css  js  c++  java
  • Python 终止线程

    import time
    from threading import Thread
    import inspect
    import ctypes
    
    def _async_raise(tid, exctype):
        """Raises an exception in the threads with id tid"""
        if not inspect.isclass(exctype):
            raise TypeError("Only types can be raised (not instances)")
        res = ctypes.pythonapi.PyThreadState_SetAsyncExc(ctypes.c_long(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 func(name):
        time_count = 0
        for i in range(10):
            time.sleep(1)
            time_count = time_count + 1
            print(f"{name} {time_count}秒")
    
    def func2(name, t1):
        time_count = 0
        for i in range(10):
            time.sleep(1)
            time_count = time_count + 1
            if time_count == 4:
                stop_thread(t1)
            print(f"{name} {time_count}秒")
    
    # def func2():
    #     i1 = InnerFunc()
    #     i1.func("类")
    
    
    class InnerFunc():
        def func(self, name):
            time_count = 0
            for i in range(10):
                time.sleep(1)
                time_count = time_count + 1
                print(f"Class {name} {time_count}秒")
    
    
    if __name__ == '__main__':
        # lines = inspect.getsourcelines(func2)
        # print(lines)
        print("-"*100)
        t1 = Thread(target=func, args=("线程1",))
        t2 = Thread(target=func2, args=("线程2击杀", t1))
    
        t2.setDaemon(True)
        t1.start()
        t2.start()
    
        # t_class.start()
        # time.sleep(4)
        # stop_thread(t1)
        print("主线程结束")
    
  • 相关阅读:
    SQL处理重复数据
    ASP.NET下载网站上的地图图片(精)
    js应用大全
    vs2003运行过程中出现的一些错误汇总
    Google卫片下载(转)
    JS获取网页中HTML元素的几种方法
    8位QQ大放送
    .net 读取Xml文件并进行DropDownList数据绑定
    C# Stream 和 byte[] 之间的转换
    【C#4.0】中的dynamic与var的区别
  • 原文地址:https://www.cnblogs.com/MasonHu/p/14273155.html
Copyright © 2011-2022 走看看