• 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         #用来被外部访问的
       
  • 相关阅读:
    jquery插件之文字无缝向上滚动
    jquery插件之tab标签页或滑动门
    jquery插件之表格隔行变色并鼠标滑过高亮显示
    jquery过滤器之:contains()、.filter()
    css3动画在动作结束时保持该状态不变的解决办法
    CSS3两个动画顺序衔接播放
    css去掉使用bootstrap框架后打印网页时预览效果下的超链接
    R in action读书笔记(13)第十章 功效分析
    Python学习 Day 7 面向对象 类和实例 访问限制
    R in action读书笔记(12)第九章 方差分析
  • 原文地址:https://www.cnblogs.com/ojbk6943/p/14047952.html
Copyright © 2020-2023  润新知