python线程笔记2

线程

我的线程



import threading,time


class Main(object):
    def __init__(self):
        pass
    def main(self):
        t1=Mythread("t1")
        t2=Mythread("t2")
        t1.start()
        t2.start()
        # t1.run()
        # t2.run()


class Mythread(threading.Thread):
    def __init__(self,Tname):
        super(Mythread,self).__init__()
        self.Tname=Tname

    def run(self):
        print("task",self.Tname)
        time.sleep(2)



if __name__ == '__main__':
    Main().main()

启动50个线程,程序本来就是一个线程(主线程):51个

  • 主线程和子线程是并行的
import threading,time


class Main(object):
    Tread_List=[]
    def __init__(self):
        pass
    def main(self):
        # t1=Mythread("t1")
        # t2=Mythread("t2")
        # t1.start()
        # t2.start()
        # t1.run()
        # t2.run()
        start_time = time.time()
        for i in range(10):
            t=Mythread("t-%s"%i)
            t.start()
            Main.Tread_List.append(t)
            pass
        stop_time = time.time()
        print(stop_time - start_time)

class Mythread(threading.Thread):
    def __init__(self,Tname):
        super(Mythread,self).__init__()
        self.Tname=Tname

    def run(self):
        print("task",self.Tname)
        time.sleep(5)



if __name__ == '__main__':

    Main().main()

Process finished with exit code 0

运行结果:

/Library/Frameworks/Python.framework/Versions/3.7/bin/python3 /Users/li/Desktop/pythonproject/线程thread.py
task taskt-0
 t-1
task t-2
task t-3
task t-4
task t-5
task t-6
task t-7
task t-8
task t-9
0.0033111572265625

耗时0.0033111572265625秒,而子线程至少耗时5秒,说明子线程不影响主线程的运行二者并行

将线程添加入列表中,计算子线程耗时,使用join函数

join()使得在子线程运行完之前,主线程等待子线程运行

import threading,time


class Main(object):
    Tread_List=[]
    def __init__(self):
        pass
    def main(self):
        # t1=Mythread("t1")
        # t2=Mythread("t2")
        # t1.start()
        # t2.start()
        # t1.run()
        # t2.run()
        start_time = time.time()
        for i in range(10):
            t=Mythread("t-%s"%i)
            t.start()
            Main.Tread_List.append(t)
        for t in Main.Tread_List:
            t.join()
            pass
        stop_time = time.time()
        print(stop_time - start_time)

class Mythread(threading.Thread):
    def __init__(self,Tname):
        super(Mythread,self).__init__()
        self.Tname=Tname

    def run(self):
        print("task",self.Tname)
        time.sleep(5)



if __name__ == '__main__':

    Main().main()

运行结果:

/Library/Frameworks/Python.framework/Versions/3.7/bin/python3 /Users/li/Desktop/pythonproject/线程thread.py
task t-0
task t-1
task t-2
task t-3
task t-4
task t-5
task t-6
task t-7
task t-8
task t-9
5.006242036819458

Process finished with exit code 0

守护线程

什么是守护线程?
守护线程是目的线程的奴隶,主人消亡,奴隶消亡。
将上面的10个线程变为主线程的守护线程:
setDaemon(True) #把当前线程设置为守护线程

  • 主线程结束–>子线程被强制结束(中断)

import threading,time


class Main(object):
    Tread_List=[]
    def __init__(self):
        pass
    def main(self):
        # t1=Mythread("t1")
        # t2=Mythread("t2")
        # t1.start()
        # t2.start()
        # t1.run()
        # t2.run()
        start_time = time.time()
        for i in range(10):
            t=Mythread("t-%s"%i)
            t.setDaemon(True)      #把当前线程设置为守护线程
            t.start()
            Main.Tread_List.append(t)
        # for t in Main.Tread_List:
        #     t.join()
        #     pass
        # stop_time = time.time()
        # print(stop_time - start_time)

class Mythread(threading.Thread):
    def __init__(self,Tname):
        super(Mythread,self).__init__()
        self.Tname=Tname

    def run(self):
        print("task",self.Tname)
        time.sleep(5)

运行时,主线程退出,不必等待子线程运行,而是直接中断子线程,退出


import threading,time


class Main(object):
    Tread_List=[]
    def __init__(self):
        pass
    def main(self):
        # t1=Mythread("t1")
        # t2=Mythread("t2")
        # t1.start()
        # t2.start()
        # t1.run()
        # t2.run()
        start_time = time.time()
        for i in range(10):
            t=Mythread("t-%s"%i)
            t.setDaemon(True)      #把当前线程设置为守护线程
            t.start()
            Main.Tread_List.append(t)
        # for t in Main.Tread_List:
        #     t.join()
        #     pass
        # stop_time = time.time()
        # print(stop_time - start_time)

class Mythread(threading.Thread):
    def __init__(self,Tname):
        super(Mythread,self).__init__()
        self.Tname=Tname

    def run(self):
        print("task",self.Tname)
        time.sleep(5)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值