Python并发编程之创建多线程的几种方法(二)

大家好,并发编程 进入第二篇。

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

本文目录

  • 学会使用函数创建多线程
  • 学会使用类创建多线程
  • 多线程:必学函数讲解


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

  • 函数

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

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

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

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

  • 线程函数名:要放置线程让其后台执行的函数,由我们自已定义,注意不要加()
  • 线程函数的参数:线程函数名所需的参数,以元组的形式传入。若不需要参数,可以不指定。

举个例子

 1import time 2from threading import Thread 3 4# 自定义线程函数。 5def main(name="Python"): 6    for i in range(2): 7        print("hello", name) 8        time.sleep(1) 910# 创建线程01,不指定参数11thread_01 = Thread(target=main)12# 启动线程0113thread_01.start()141516# 创建线程02,指定参数,注意逗号17thread_02 = Thread(target=main, args=("MING",))18# 启动线程0219thread_02.start()

可以看到输出

1hello Python2hello MING3hello Python4hello MING

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

. 学会使用类创建多线程

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

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

  • 必须继承 threading.Thread 这个父类;
  • 必须覆写 run 方法。

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

来看一下例子
为了方便对比,run函数我复用上面的main

 1import time 2from threading import Thread 3 4class MyThread(Thread): 5    def __init__(self, name="Python"): 6        # 注意,super().__init__() 一定要写 7        # 而且要写在最前面,否则会报错。 8        super().__init__() 9        self.name=name1011    def run(self):12        for i in range(2):13            print("hello", self.name)14            time.sleep(1)1516if __name__ == ‘__main__‘:17    # 创建线程01,不指定参数18    thread_01 = MyThread()19    # 创建线程02,指定参数20    thread_02 = MyThread("MING")2122    thread_01.start()23    thread_02.start()

当然结果也是一样的。

1hello Python2hello MING3hello Python4hello MING

. 多线程:必学函数讲解

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

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

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

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

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

 1t=Thread(target=func) 2 3# 启动子线程 4t.start() 5 6# 阻塞子线程,待子线程结束后,再往下执行 7t.join() 8 9# 判断线程是否在执行状态,在执行返回True,否则返回False10t.is_alive()11t.isAlive()1213# 设置线程是否随主线程退出而退出,默认为False14t.daemon = True15t.daemon = False1617# 设置线程名18t.name = "My-Thread"

好了,Python线程基础知识,我们大概都介绍完了。

从下一章开始,我们就开始接触多线程里比较难的知识点啦,是不是有点小期待呢?



本系列文章首发于公众号:PytherTime
未授权者禁止转载。

关注公众号,获取最新文章

原文地址:https://www.cnblogs.com/wongbingming/p/9028851.html

时间: 2024-10-06 17:20:33

Python并发编程之创建多线程的几种方法(二)的相关文章

Python并发编程系列之多线程

1引言 2 创建线程 2.1 函数的方式创建线程 2.2 类的方式创建线程 3 Thread类的常用属性和方法 3.1 守护线程:Deamon 3.2 join()方法 4 线程间的同步机制 4.1 互斥锁:Lock 4.2 递归锁:RLock 4.3 Condition 4.4 信号量:Semaphore 4.5 事件:Event 4.6 定时器:Timer 5 线程间的通行 5.1队列:Queue 6 线程池 7 总结 1 引言 上一篇博文详细总结了Python进程的用法,这一篇博文来所以说

【并发编程】实现多线程的几种方式

摘自:https://www.cnblogs.com/54chensongxia/p/11970827.html 本博客系列是学习并发编程过程中的记录总结.由于文章比较多,写的时间也比较散,所以我整理了个目录贴(传送门),方便查阅. 并发编程系列博客传送门 在Java中有多种方式可以实现多线程编程(记得这是一道常问的面试题,特别是在应届生找工作的时候被问的频率就更高了). 继承Thread类并重写run方法: 实现Runnable接口,并将这个类的实例当做一个target构造Thread类 实现

iOS 创建多线程的三种方法

<span style="font-size:18px;"><strong>(1)//通过NSObject的方法创建线程</strong></span> //(这个方法会自动开辟一个后台线程,参数1:在这个后台线程中执行的方法,参数2:用于传递参数) [self performSelectorInBackground:@selector(banZhuanPlus) withObject:nil]; (2)//通过NSThread创建线程(

python并发编程(一):多线程,多进程

'''多进程(线程)编程: 1. 进程和线程 2. 并发与并行 3. 同步和异步 4. 阻塞和非阻塞 5. 进程/线程的调度模型''' # 综述 '''进程和线程: 1. 进程: 1) 是一个程序在数据集上的一次动态执行过程 2) 由程序, 数据集, 进程控制模块组成 2. 线程: 1) 是CPU的一个最小执行单元, 2) 线程的出现是为了降低进程间切换的消耗 3) 实现在一个进程内的并发 4) 由线程ID, 程序计数器, 寄存器集合, 堆栈组成 3. 进程和线程的关系: 1) 进程是线程的容器

Java创建多线程的三种方法

Java多线程实现方式主要有三种:继承Thread类.实现Runnable接口.使用ExecutorService.Callable.Future实现有返回结果的多线程.其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的. 1.继承Thread类实现多线程继承Thread类的方法尽管被我列为一种多线程实现方式,但Thread本质上也是实现了Runnable接口的一个实例,它代表一个线程的实例,并且,启动线程的唯一方法就是通过Thread类的start()实例方法.start()方法

python-学习-python并发编程之多进程与多线程

一 multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在python中大部分情况需要使用多进程.Python提供了multiprocessing.    multiprocessing模块用来开启子进程,并在子进程中执行我们定制的任务(比如函数),该模块与多线程模块threading的编程接口类似.  multiprocessing模块的功能众多:支持子进程.通信和共享数据.执行不同形式的同步,

python并发编程&amp;多线程(一)

本篇理论居多,实际操作见:  python并发编程&多线程(二) 一 什么是线程 在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程 线程顾名思义,就是一条流水线工作的过程,一条流水线必须属于一个车间,一个车间的工作过程是一个进程 车间负责把资源整合到一起,是一个资源单位,而一个车间内至少有一个流水线 流水线的工作需要电源,电源就相当于cpu 所以,进程只是用来把资源集中到一起(进程只是一个资源单位,或者说资源集合),而线程才是cpu上的执行单位. 多线程(即多个控制线程)的概念

python并发编程&amp;多线程(二)

前导理论知识见:python并发编程&多线程(一) 一 threading模块介绍 multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性 官网链接:https://docs.python.org/3/library/threading.html?highlight=threading#(装B模式加载中…………) 二 开启线程的两种方式  方式一  方式二 三 在一个进程下开启多个线程与在一个进程下开启多个子进程的区别  1 谁的开启速度快  2 瞅

Python并发编程04/多线程

目录 Python并发编程04/多线程 1.生产消费者模型 2.线程的理论知识 2.1什么是线程 2.2线程vs进程 2.3线程的应用 3.开启进程的两种方式 3.1第一种方式 3.2第一种方式 4.线程vs进程的代码对比 4.1开启速度对比 4.2对比pid 4.3同一个进程内线程共享内部数据 5.线程的其他方法 6.join与守护线程 6.1join 6.2守护线程 7.互斥锁 Python并发编程04/多线程 1.生产消费者模型 #编程思想,模型,设计模式,理论等等,都是交给你一种编程的方