• python中对线程的运行和停止怎么实现


     

    一、启动线程

    启动太简单了,随便一篇python教程有关多线程的讲解都会讲到;

    二、停止线程

    这里分享2种思路,

    方法1:(亲测可用,就是有点繁琐了) 

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    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)

    定义完上面的2个函数后,如下一样调用即可

    stop_thread(myThread)

    (方法2)(亲测可用,就是基本思路,全局变量的使用,python 的基本知识)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    import threading
    import time
    class MyThread(threading.Thread):
      def __init__(self):
        threading.Thread.__init__(self)
        self.Flag=True        #停止标志位
        self.Parm=0         #用来被外部访问的
       
       
      def run(self):
        while(True):
          if(not self.Flag):
            break
          else:
            time.sleep(2)
       
      def setFlag(self,parm):     #外部停止线程的操作函数
        self.Flag=parm #boolean
      
      def setParm(self,parm):     #外部修改内部信息函数
        self.Parm=parm
      
      def getParm(self):       #外部获得内部信息函数
        return self.Parm
      
      
    if __name__=="__main__":
      testThread=MyThread()
      testThread.setDaemon(True)     #设为保护线程,主进程结束会关闭线程
     
      testThread.start()       #开始线程
     
      time.sleep(2)          #主进程休眠 2 秒
      testThread.setFlag(False)   #修改线程运行状态
      time.sleep(2)         
      print(testThread.is_alive())  #查看线程运行状态
    1
    2
    3
    4
    def __init__(self):
        self.Flag=True        #停止标志位
        self.Parm=0         #用来被外部访问的
        #自行添加参数
    1
    2
    3
    4
    5
    def __init__(self):
        threading.Thread.__init__(self)
        self.Flag=True        #停止标志位
        self.Parm=0         #用来被外部访问的
       
  • 相关阅读:
    java中a++和++a的区别详解
    Oracle 对比两张表不一样 的数据
    通配符的匹配很全面, 但无法找到元素 'tx:annotation-driven' 的声明
    Java语言基础-运算符
    java中+=详解 a+=b和a=a+b的区别
    java语言基础-变量
    java语言基础-进制
    Spring整合CXF发布及调用WebService
    Oracle Job定时任务的使用详解
    MySQL的主从配置
  • 原文地址:https://www.cnblogs.com/ojbk6943/p/14047952.html
Copyright © 2020-2023  润新知