python主线程有两个子线程、创建两个主函数_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)

9

10# 创建线程01,不指定参数

11thread_01 = Thread(target=main)

12# 启动线程01

13thread_01.start()

14

15

16# 创建线程02,指定参数,注意逗号

17thread_02 = Thread(target=main, args=("MING",))

18# 启动线程02

19thread_02.start()

可以看到输出1hello Python

2hello MING

3hello Python

4hello 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=name

10

11    def run(self):

12        for i in range(2):

13            print("hello", self.name)

14            time.sleep(1)

15

16if __name__ == '__main__':

17    # 创建线程01,不指定参数

18    thread_01 = MyThread()

19    # 创建线程02,指定参数

20    thread_02 = MyThread("MING")

21

22    thread_01.start()

23    thread_02.start()

当然结果也是一样的。1hello Python

2hello MING

3hello Python

4hello MING

.多线程:必学函数讲解

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

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

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

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

经过我的总结,大约常用的方法有如下这些:1t=Thread(target=func)

2

3# 启动子线程

4t.start()

5

6# 阻塞子线程,待子线程结束后,再往下执行

7t.join()

8

9# 判断线程是否在执行状态,在执行返回True,否则返回False

10t.is_alive()

11t.isAlive()

12

13# 设置线程是否随主线程退出而退出,默认为False

14t.daemon = True

15t.daemon = False

16

17# 设置线程名

18t.name = "My-Thread"

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值