python 线程编程 Treading
记录时间:2019/4/23
问题:
- python运行程序和各个线程之间什么关系?
- 如何来实例化一个线程?如何运行一个线程?需要注意什么?
- 面向对象编程中如何定义一个线程?
- 如何在主线程中等待各个子线程完成?
- 如何设置守护线程?即主线程运行完之后守护线程自动退出?
- 线程之间如何进行最简单的标志位通讯?
- 线程中如何定义锁?多个锁如何来使用?
- 什么是信号量?如何定义信号量?在什么场景下会使用信号量?
- 队列如何使用?可以和线程之间产生什么互动?
解答:
1. python运行的主程序和各个线程之间什么关系?
python中的主程序作为 主线程,而在程序中定义地称为 子线程,多个线程并发执行。
2. 如何来实例化一个线程?如何运行一个线程?需要注意什么?
使用 mythread = threading.Thread( )来声明一个线程; 声明之后使用 .start()方法来启动这个进程; 需要注意,声明时参数必须用元祖的形式传入
- 使用 thread.Threading( )来声明一个线程
# 定义线程运行的函数 def run(n): print("task", n) time.sleep(2) print("task done",n) # 来实例化线程 t1 = threading.Thread(target=run, args=("t1",)) # args 必须以元祖的形式传入 # 启动线程 t1.start()
3. 面向对象编程中如何定义一个线程?
要定义一个线程,需要根据 Threading.Thread 作为父类来定义一个子类,在构造函数中将父类重构,并且定义 run() 成员函数,来说明当线程运行的程序。
- 定义 线程类
# 定义线程类 class MyThread(threading.Thread): # 构造函数 def __init__(self,n,sleep_time): super(MyThread, self).__init__() # 先来使用 super()完成父类的初始化 self.n = n self.sleep_t