有参数时:
带参数的类线程组:
需要定义:init初始化方法,并在初始化方法中继承父类初始化方法
super().__init__()
看一下带有参数的类线程组如何执行:
import time
from threading import Thread
import requests
def warpper(func):
def count_time():
start_time = time.time()
func()
end_time=time.time()
print('函数运行时间是:{:.5f}'.format(end_time-start_time))
return count_time
#定义线程类
class MyThread(Thread):
def __init__(self,url):
super().__init__()
self.url = url
def run(self):
for i in range(10):
requests.get(url=self.url)
print("第"+str(i)+"次发送请求")
@warpper
def main():
t_list=[]
for i in range(10):
t = MyThread('https://www.baidu.com')
t.start()
t_list.append(t)
for t in t_list:
t.join()
if __name__ == '__main__':
main()
运行结果:
第0次发送请求
第0次发送请求
第0次发送请求
第0次发送请求
第0次发送请求
第0次发送请求
第0次发送请求
第0次发送请求
第0次发送请求
第0次发送请求
第1次发送请求
第1次发送请求
第1次发送请求
第1次发送请求
第1次发送请求
第1次发送请求
第1次发送请求
第1次发送请求
第1次发送请求
第2次发送请求
第2次发送请求
第1次发送请求
第2次发送请求
第2次发送请求
第2次发送请求
第2次发送请求
第2次发送请求
第2次发送请求
第2次发送请求
第3次发送请求
第3次发送请求
第3次发送请求
第3次发送请求
.......
函数运行时间是:1.52796
带参数的函数线程组:
需要在Thread()类中指定参数,可以为元组格式或者字典格式
import time
from threading import Thread
def warpper(func):
def count_time():
start_time = time.time()
func()
end_time=time.time()
print('函数运行时间是:{:.5f}'.format(end_time-start_time))
return count_time
def work1(name):
for i in range(6):
time.sleep(1)
print(F'{name}----work1--------')
def work2(name):
for i in range(5):
time.sleep(1)
print(F'{name}######work2--------')
@warpper
def main():
t1 = Thread(target=work1,kwargs={'name':'小静'}) #字典形式传入参数
t2 = Thread(target=work2,args=('小明',)) #元组形式传入参数
t1.start() #启动线程对象
t2.start()
#设置主线程等待,等待线程执行完毕才会执行主线程
t1.join()
t2.join()
print('---主线程把mian函数执行完毕----')
main()
print('----主线程执行函数之后的代码------')
运行结果:
小明######work2--------
小静----work1--------
小静----work1--------小明######work2--------
小明######work2--------
小静----work1--------
小明######work2--------
小静----work1--------
小明######work2--------小静----work1--------
小静----work1--------
---主线程把mian函数执行完毕----
函数运行时间是:6.00689
----主线程执行函数之后的代码------
其余方法:
- isAlive() 返回线程是否活动的
- isName() 返回线程名称
- setName() 设置线程名称
import time
from threading import Thread
def warpper(func):
def count_time():
start_time = time.time()
func()
end_time=time.time()
print('函数运行时间是:{:.5f}'.format(end_time-start_time))
return count_time
def work1(name):
for i in range(2):
time.sleep(1)
print(F'{name}----work1--------')
def work2(name):
for i in range(3):
time.sleep(1)
print(F'{name}######work2--------')
@warpper
def main():
t1 = Thread(target=work1,kwargs={'name':'小静'},name='子线程1') #字典形式传入参数
t2 = Thread(target=work2, args=('小明',))
print(t1.isAlive()) #判断是否开启 此刻开启线程前应该为关闭
t1.start() #启动线程对象
print(t1.isAlive())
print(t1.getName()) #获取线程名称
t2.setName('子线程2') #设置子线程名称
print(t2.getName())
t2.start()
#设置主线程等待,等待线程执行完毕才会执行主线程
t1.join()
t2.join()
print('---主线程把mian函数执行完毕----')
main()
print('----主线程执行函数之后的代码------')
运行结果:
False
True
子线程1
子线程2
小明######work2--------小静----work1--------
小明######work2--------
小静----work1--------
小明######work2--------
---主线程把mian函数执行完毕----
函数运行时间是:3.00323
----主线程执行函数之后的代码------