详解Python并发编程之创建多线程的几种方法

作者:Python编程时光 时间:2023-03-31 19:34:37 

大家好,并发编程 今天开始进入第二篇。

今天的内容会比较基础,主要是为了让新手也能无障碍地阅读,所以还是要再巩固下基础。学完了基础,你们也就能很顺畅地跟着我的思路理解以后的文章。

本文目录

  • 学会使用函数创建多线程

  • 学会使用类创建多线程

  • 多线程:必学函数讲解

经过总结,Python创建多线程主要有如下两种方法:

  • 函数

接下来,我们就来揭开多线程的神秘面纱。

. 学会使用函数创建多线程

在Python3中,Python提供了一个内置模块 threading.Thread,可以很方便地让我们创建多线程。

threading.Thread() 一般接收两个参数:

  • 线程函数名:要放置线程让其后台执行的函数,由我们自已定义,注意不要加();

  • 线程函数的参数:线程函数名所需的参数,以元组的形式传入。若不需要参数,可以不指定。

举个例子


import time
from threading import Thread

# 自定义线程函数。
def main(name="Python"):
  for i in range(2):
    print("hello", name)
    time.sleep(1)
# 创建线程01,不指定参数
thread_01 = Thread(target=main)
# 启动线程01
thread_01.start()

# 创建线程02,指定参数,注意逗号
thread_02 = Thread(target=main, args=("MING",))
# 启动线程02
thread_02.start()

可以看到输出

hello Python
hello MING
hello Python
hello MING

是不是超级简单呢?别急,下面也是一样简单。

. 学会使用类创建多线程

相比较函数而言,使用类创建线程,会比较麻烦一点。

首先,我们要自定义一个类,对于这个类有两点要求,

  • 必须继承 threading.Thread 这个父类;

  • 必须覆写 run 方法。

这里的 run 方法,和我们上面线程函数的性质是一样的,可以写我们的业务逻辑程序。在 start() 后将会调用。

来看一下例子

为了方便对比,run函数我复用上面的main。


import time
from threading import Thread

class MyThread(Thread):
  def __init__(self, name="Python"):
    # 注意,super().__init__() 一定要写
    # 而且要写在最前面,否则会报错。
    super().__init__()
    self.name=name

def run(self):
   for i in range(2):
     print("hello", self.name)
     time.sleep(1)

if __name__ == '__main__':
 # 创建线程01,不指定参数
 thread_01 = MyThread()
 # 创建线程02,指定参数
 thread_02 = MyThread("MING")

thread_01.start()
 thread_02.start()

当然结果也是一样的。

hello Python
hello MING
hello Python
hello MING

. 多线程:必学函数讲解

学完了两种创建线程的方式,你一定会惊叹,咋么这么简单,一点难度都没有。

其实不然,上面我们的线程函数 为了方便理解,都使用的最简单的代码逻辑。而在实际使用当中,多线程运行期间,还会出现诸多问题,只是我们现在还没体会到它的复杂而已。

不过,你也不必担心,在后面的章节中,我会带着大家一起来探讨一下,都有哪些难题,应该如何解决。

磨刀不误吹柴工,我们首先得来认识一下,Python给我们提供的 Thread 都有哪些函数和属性,实现哪些功能。学习完这些,在后期的学习中,我们才能更加得以应手。

经过我的总结,大约常用的方法有如下这些:


t=Thread(target=func)

# 启动子线程
t.start()

# 阻塞子线程,待子线程结束后,再往下执行
t.join()

# 判断线程是否在执行状态,在执行返回True,否则返回False
t.is_alive()
t.isAlive()

# 设置线程是否随主线程退出而退出,默认为False
t.daemon = True
t.daemon = False

# 设置线程名
t.name = "My-Thread"

来源:https://mp.weixin.qq.com/s/FNMmrWcYRk1QE2yD44DYMg

标签:Python,创建,多线程
0
投稿

猜你喜欢

  • golang 删除切片的某个元素及剔除切片内的零值方式

    2024-04-25 15:30:59
  • asp中将有双引号标题入库的方法

    2023-07-09 15:24:56
  • Pyqt QImage 与 np array 转换方法

    2022-01-03 01:18:53
  • python使用hdfs3模块对hdfs进行操作详解

    2023-10-30 07:12:03
  • MySQL锁(表锁,行锁,共享锁,排它锁,间隙锁)使用详解

    2024-01-20 12:07:17
  • DTS构建组件及其如何完成数据转换服务

    2009-01-20 15:37:00
  • python Matplotlib模块的使用

    2022-12-26 21:18:37
  • Access保留字和变量名列表

    2007-10-15 12:43:00
  • Python虚拟机字节码教程之装饰器实现详解

    2021-10-31 08:59:47
  • Python协程 yield与协程greenlet简单用法示例

    2023-02-23 04:07:25
  • python 爬取知乎回答下的微信8.0状态视频

    2022-09-11 15:17:57
  • SQL Server取得网站路径的几种方法及比较

    2008-12-09 14:15:00
  • django框架cookie和session用法实例详解

    2021-04-24 16:23:26
  • mysql如何让左模糊查询也能走索引

    2024-01-16 09:20:32
  • Python函数高级(命名空间、作用域、装饰器)

    2022-03-15 23:31:44
  • 关于使用python对mongo多线程更新数据

    2021-08-22 22:07:12
  • python 中yaml文件用法大全

    2021-11-30 08:02:29
  • ASP用户登录模块的设计

    2008-11-21 16:55:00
  • Pycharm使用Database Navigator连接mysql数据库全过程

    2024-01-15 03:58:35
  • 一文带你搞懂Python中的数据容器

    2021-05-25 16:09:59
  • asp之家 网络编程 m.aspxhome.com