python3线程启动与停止

转自:

https://blog.csdn.net/weixin_38125866/article/details/76795462

https://www.cnblogs.com/lcchuguo/p/4687348.html

python3的线程启动支持两种方式:

一种是以传入函数名开启;

另一种是通过重写run方法开启;

以传入函数名开启:

import time
import threading

def demo(n):
   while n >= 0:
       print("n:", n)
       n -= 1
       time.sleep(1)


if __name__=='__main__':

    t = threading.Thread(target=demo, args=(10,))
    t.start()
    t.join()
    print("exit")

重写run方法:

import time
import threading

class A(threading.Thread):
    def __init__(self, args):
        threading.Thread.__init__(self)
        self.args = args

    def run(self):
        n = self.args
        while n > 0:
            print("n:", n)
            n -= 1
            time.sleep(1)



if __name__=='__main__':

    t = A(10)
    t.start()
    t.join()
    print("exit")

创建后台线程:

t = threading.Thread(target=demo, args=(20,), daemon=True)
t.start()

------------------------------------------------------------

创建后台线程:

def f0():
    pass
 
def f1(a1,a2):
    time.sleep(5)
    f0()
 
'''下面代码是直接运行下去的,不会等待函数里面设定的sleep'''
t= threading.Thread(target=f1,args=(111,112))#创建线程
t.setDaemon(True)#设置为后台线程,这里默认是False,设置为True之后则主线程不用等待子线程
t.start()#开启线程
 ------------------------------
将类中的函数放在线程中执行,且能控制线程的结束
import time
import threading

class DownThread:
    def __init__(self):
        self._running = True

    def terminate(self):
        self._running = False

    def run(self, n):
        while self._running and n > 0:
            print('T-minus', n)
            n -= 1
            time.sleep(1)
  

if __name__=='__main__':


    c = DownThread()
    t = threading.Thread(target=c.run, args=(10,))
    t.start()
    time.sleep(3)
    c.terminate()
    t.join()

 Python多线程里面的event方法实现线程间通信

Python 通过threading.Event()产生一个event对象。event对象维护一个内部标志(标志初始值为False),通过set()将其置为True。wait(timeout)则用于堵塞线程直至Flag被set(或者超时,可选的),isSet()用于查询标志位是否为True,

Clear()则用于清除标志位(使之为False)。

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

def do(event):
    print('start')
    event.wait()
    print('end')

if __name__ == "__main__":
    event_obj = threading.Event()  # 创建一个事件
    event_obj.clear()

    t1 = threading.Thread(target=do, args=(event_obj,))
    t1.start()

    data = input('请输入要:')
    if data == 'True':
        event_obj.set()  # 变绿灯

    time.sleep(5)
 

猜你喜欢

转载自www.cnblogs.com/zhangxuan/p/9264791.html