46.Python进阶_线程2_带参数的线程

有参数时:

带参数的类线程组:

需要定义: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
----主线程执行函数之后的代码------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值