前言:
目前姐妹们对“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线程