菜鸟笔记
提升您的技术认知

python3 线程的停止-ag真人游戏

1、threading类

设置子线程为守护线程,(setdaemon=true),当主线程结束时,守护线程会自动结束

import threading
def run(x):
    while x:
        print(x)
t = threading.thread(target=run,args=(4,), daemon=true)
#t.setdaemon(true)
#t.daemon=true
t.start() # 开始线程
# t.join()   # join() 表示主线程阻塞,一直等子线程执行结束

2、类中直接设置标志位

import threading
class run():
    def __init__(self):
        self._flag=false
    def run(self,x):
        while x:
            print(x,self._flag)
            if self._flag:
                break
    def terminate(self):
        self._flag = true
if __name__ == '__main__':
    fun = run()
    t = threading.thread(target=fun.run, args=(5,))
    t.start()
    p=5
    while p:
        print(threading.activecount())
        p=p-1
    fun.terminate()
    t.join()

threading.event()产生一个event对象。event默认内置了一个标志,初始值为false,

set():将标志置为true;

clear():则用于清除标志位(使之为false);

wait(timeout):当event对象的内部信号标志为false时。wait方法一直堵塞线程等待到其为真或者超时(若提供,浮点数,单位为秒)才返回,若event对象内部标志为true则wait()方法马上返回;

isset():用于查询标志位是否为true,

import threading
import time
 
 
class job(threading.thread):
 
  def __init__(self, *args, **kwargs):
    super(job, self).__init__(*args, **kwargs)
    self.__flag = threading.event()   # 用于暂停线程的标识
    self.__flag.set()    # 设置为true
    self.__running = threading.event()   # 用于停止线程的标识
    self.__running.set()   # 将running设置为true
 
  def run(self):
    while self.__running.isset():
      self.__flag.wait()   # 为true时立即返回, 为false时阻塞直到内部的标识位为true后返回
      print time.time()
      time.sleep(1)
 
  def pause(self):
    self.__flag.clear()   # 设置为false, 让线程阻塞
 
  def resume(self):
    self.__flag.set()  # 设置为true, 让线程停止阻塞
 
  def stop(self):
    self.__flag.set()    # 将线程从暂停状态恢复, 如何已经暂停的话
    self.__running.clear()    # 设置为false 

 

网站地图