python 多线程之 threading库

在使用 python 做一些工作以及爬虫的时候,我们往往想要在一段时间中多个函数同时运行。而不是线性运行,运行完函数一、再运行函数二。那样太耗费我们的时间了

出于这个原因,python 自带库中提供了 threading库来解决问题

使用方法

import threadingimport timedef f1():    time.sleep(2)    print('子程序运行')def f2():    print('主程序运行')t1 = threading.Thread(target=f1) #创建一个子程序(另一个独木桥) 其中这个子程序的目标是函数f1t1.start()f2()

运行这个代码会发现程序先输出“主程序运行”再输出“子程序运行”这便就是创建一个子程序来达到多线程运行的效果

 

其中 threading 中的 Thread 类还可以传入许多参数

例如

t1 = threading.Thread(target=f1,name='子程序',args=(),daemon=True)

在这些参数中,我认为重要的 'args,daemon'

 

首先介绍daemon参数的作用

在 Thread 类中 daemon 参数默认 = None

当我们将 daemon=True 时

import threadingimport timedef f1():    time.sleep(2)    print('子程序运行')def f2():    print('主程序运行')t1 = threading.Thread(target=f1,daemon=True)t1.start()f2()

运行这个代码会发现  在屏幕上打印完“主程序运行”这个程序便停止运行了

也就是说 当 deamon=True 时,将不会等待子程序运行完成,当主程序运行完成时,这个程序便相当于运行完成了

 

args 参数

我们在编写函数时 往往会让用户传入实参,Thread类便提供了args参数来让我们传入实参

用法

import threadingimport timedef f1(name):    time.sleep(2)    print(f'Hello {name}')def f2():    print('主程序运行')t1 = threading.Thread(target=f1,args=('罗翔',))t1.start()f2()

我们传入一个实参'罗翔'给形参 name

这里要注意几点

  1. args需要传入一个元组
  2. 传入的参数用逗号来隔开
  3. 当函数只需要传入一个参数时,在那个参数后面也必须加一个逗号

这里再举一个我学习时遇到的一个问题

import threadingimport timedef f1(name):    time.sleep(2)    print(f'Hello {name}')def f2():    print('主程序运行')t1 = threading.Thread(target=f1('罗翔'))t1.start()f2()

最开始我是用一般函数传入参数来写的

不过这样我发现一个问题。虽然程序不会报错,但是程序会和最开始一样线性运行,也就是先调用完函数 f1 再调用 f2

 

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值