龙空技术网

Python多线程

之乎者矣 144

前言:

目前姐妹们对“python的join线程”可能比较关注,小伙伴们都想要知道一些“python的join线程”的相关知识。那么小编同时在网络上收集了一些对于“python的join线程””的相关资讯,希望朋友们能喜欢,你们快快来学习一下吧!

线程的两种写法:

第一种:使用线程自带的包

from  threading import  Thread
from threading import  Threadimport  randomimport  timedef work(i):    print('开始测试')    time.sleep(random.randint(1,4))    print(f'服务器{i}')    print('结束测试')if __name__ == '__main__':    t1=Thread(target=work,args=('服务器1',)) #注意要加逗号,    t1.start()    t2=Thread(target=work,args=('服务器2',)) #注意要加逗号,    t2.start()    t3=Thread(target=work,args=('服务器3',)) #注意要加逗号,    t3.start()

这里是创建了3个线程,分别进行各自的任务。在Thread(target=work,args=('服务器1',))中,target=work是被执行的函数。args=('服务器1',))此时的参数是服务器1,需要用到元组格式,因此后面需要加逗号,

t1是创建了这个线程,t1.start()是启动这个线程。

第二种写法:继承Thread,并在自己的类中,重写run方法

#进程理解成公司,线程理解成员工from  threading import  Threadimport  timeimport  random#继承Thread,并在自己的类中,重写run方法#每次运行程序都会至少产生一个单独的进程,该进程会有一个主线程存在class MyThread(Thread):   #继承Thread        #-> None 表示返回值类型应该是None    def __init__(self,fu):        self.fu=fu        super(MyThread, self).__init__()  # 子类如果重新写父类的__init__(),必须加这句    def run(self) -> None:        #测试服务器状态        print('测试',self.fu)        time.sleep(random.randint(1,3))        print('结束',self.fu)if __name__ == '__main__':    t1=MyThread("服务器1")    t2 = MyThread("服务器2")    t3 = MyThread("服务器3")    #启动三个线程    t1.start()#记住,t1.run()是启动函数    t2.start()    t3.start()    #join()需要等待子线程结束后,继续执行主线程    t1.join()    t2.join()    t3.join()    # 让t1/t2/t3共同结束后,再往下跑完,3个线程是同时跑的    print('你好呀!')    lst=['服务器1','服务器2','服务器3']    t_list=[]    for item in lst:        t=MyThread(item)        t.start()        t_list.append(t)  #加了3个线程        # t.join()  #单线程,没意义    for t in t_list:        t.join()    print('上传文件')

这里引用了t1.join()、t2.join()、t3.join()的概念。这里的意思是:让t1/t2/t3共同结束后,主线程再往下跑完,但3个线程是开始同时跑的

在print('你好呀!')下面举例:t.join()的另一种坑。但可以建立一个线程列表,然后分别循环运行每个线程,再进行t.join()达到想要的目的。

标签: #python的join线程