py并发_threading实现多线程笔记
threading
threading 是 Python3之后开始推荐使用的一种多线程的实现模块,其最大的特点是可以采用与多进程编写几乎相同的形式来实现多线程的开发,同时内部也提供有大量方便的开发工具,使得Python多线程执行更加方便,同步处理也更加的容易。
threading是一个最新的多线程实现模块,拥有更加方便的线程控制以及线程同步支持,在此模块之中提供有一个Thread类实现线程的相关处理操作。

测试
1 | |
主线程ID:4672、主线程名称:MainThread
当前活跃线程个数:6
当前活跃线程信息:[<_MainThread(MainThread, started 4672)>, <Thread(执行线程 - 0, started 21808)>, <Thread(执行线程 - 1, started 21780)>, <Thread(执行线程 - 2, started 20856)>, <Thread(执行线程 - 3, started 20820)>, <Thread(执行线程 - 4, started 21856)>]
[执行线程 - 2]num = 0[执行线程 - 4]num = 0
[执行线程 - 1]num = 0
[执行线程 - 0]num = 0
[执行线程 - 3]num = 0
[执行线程 - 1]num = 1[执行线程 - 2]num = 1[执行线程 - 3]num = 1
[执行线程 - 4]num = 1
[执行线程 - 0]num = 1
[执行线程 - 1]num = 2[执行线程 - 4]num = 2
[执行线程 - 3]num = 2
[执行线程 - 0]num = 2
[执行线程 - 2]num = 2
[执行线程 - 2]num = 3
[执行线程 - 1]num = 3
[执行线程 - 3]num = 3
[执行线程 - 4]num = 3
[执行线程 - 0]num = 3
[执行线程 - 4]num = 4[执行线程 - 0]num = 4
[执行线程 - 1]num = 4
[执行线程 - 3]num = 4[执行线程 - 2]num = 4
进程已结束,退出代码0
在Python程序中main既是主进程,也是主线程,所有的通过它创建的进程或者是线程都属于子进程或者是子线程。
Python除了基本的面向函数的开发支持之外,实际上还提供有面向对象的处理支持,如果开发者有需要也可以利用线程类的形式来定义线程的相关处理,这个时候只需要继承“threading.Thread”类,随后覆写run()方法即可
1 | |
[执行线程 - 5] num = 0
[执行线程 - 3] num = 0
[执行线程 - 0] num = 0[执行线程 - 1] num = 0
[执行线程 - 6] num = 0[执行线程 - 4] num = 0
[执行线程 - 2] num = 0
[执行线程 - 9] num = 0[执行线程 - 8] num = 0[执行线程 - 7] num = 0
[执行线程 - 2] num = 1[执行线程 - 6] num = 1
[执行线程 - 5] num = 1
[执行线程 - 4] num = 1
[执行线程 - 0] num = 1[执行线程 - 3] num = 1
[执行线程 - 1] num = 1
[执行线程 - 9] num = 1
[执行线程 - 8] num = 1
[执行线程 - 7] num = 1
[执行线程 - 5] num = 2[执行线程 - 1] num = 2
[执行线程 - 6] num = 2
[执行线程 - 4] num = 2[执行线程 - 2] num = 2
[执行线程 - 3] num = 2
[执行线程 - 0] num = 2
[执行线程 - 7] num = 2[执行线程 - 9] num = 2[执行线程 - 8] num = 2
[执行线程 - 5] num = 3[执行线程 - 6] num = 3
[执行线程 - 1] num = 3
[执行线程 - 4] num = 3
[执行线程 - 0] num = 3
[执行线程 - 2] num = 3
[执行线程 - 3] num = 3
[执行线程 - 9] num = 3
[执行线程 - 8] num = 3
[执行线程 - 7] num = 3
[执行线程 - 1] num = 4[执行线程 - 5] num = 4
[执行线程 - 3] num = 4[执行线程 - 4] num = 4
[执行线程 - 2] num = 4
[执行线程 - 0] num = 4
[执行线程 - 6] num = 4
[执行线程 - 9] num = 4[执行线程 - 7] num = 4
[执行线程 - 8] num = 4
进程已结束,退出代码0
守护线程
以上所实现的多线程都属于前台线程,如果有需要开发者也可以定义守护线程,所有的守护线程会随着程序同时存在,如果程序执行完毕了,那么守护线程也会消失。
1 | |
[守护线程] num = 0
[用户线程] num = 0
[守护线程] num = 1
[守护线程] num = 2
[用户线程] num = 1
[守护线程] num = 3
[守护线程] num = 4
[用户线程] num = 2
[守护线程] num = 5
[守护线程] num = 6
[用户线程] num = 3
[守护线程] num = 7
[守护线程] num = 8
[用户线程] num = 4
进程已结束,退出代码0
当程序之中的用户线程执行完毕之后(主线程执行完毕了)则对应的守护线程也会自动消失