Python threading多线程编程

Python 的多线程有两种实现方法:

函数,线程类
1.函数

调用 thread 模块中的 start_new_thread() 函数来创建线程,以线程函数的形式告诉线程该做什么

不过这种方法暂时没能找到其他辅助方法,连主线程等待都要用 while 1 这种方法解决。
2.线程类

调用 threading 模块,创建 threading.Thread 的子类来得到自定义线程类。

threading.Thread 类的可继承函数:
getName() 获得线程对象名称
setName() 设置线程对象名称
join() 等待调用的线程结束后再运行之后的命令
setDaemon(bool) 阻塞模式, True: 父线程不等待子线程结束, False 等待,默认为 False
isDaemon() 判断子线程是否和父线程一起结束,即 setDaemon() 设置的值
isAlive() 判断线程是否在运行

实例

join() 阻塞等待

不带 thread1.join() ,得到如下结果:
This is thread T1
main thread is over
0
1
2
T1 is over
不等待 thread1 完成,执行之后语句。
加了 thread1.join() ,得到如下结果:
This is thread T1
0
1
2
T1 is over
main thread is over

阻塞等待 thread1 结束,才执行下面语句
主线程等待

报错: Exception in thread T1 (most likely raised during interpreter shutdown):
也就是主线程不等待子线程就结束了。
多个子线程

这里的 t 可同时处理多个线程,即 t 为线程句柄,重新赋值不影响线程。
这里奇怪的是,运行 t.run() 时,不会再执行其他线程。虽不明,还是用 start() 吧。暂且理解为 start() 是非阻塞并行的,而 run 是阻塞的。
线程锁
threading 提供线程锁,可以实现线程同步。

得到结果:
This is thread Thread_1
0
1
2
Thread_1 is over
This is thread Thread_2
0
1
2
Thread_2 is over

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值