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

 

你可能感兴趣的:(笔记,python,python,爬虫,多线程)