下面的代码来自《Python核心编程》(第二版)一书。
threading模块对象 |
说明 |
Thread | 表示一个线程的执行的对象 |
Lock | 锁原语对象(跟thread模块里的锁原语对象相同) |
RLock | 可重入锁对象。使单线程可以再次获得已经获得了的锁(递归锁定) |
Condition | 条件变量对象能让一个线程停下来,等待其他线程满足了某个“条件”。如,状态的改变或值得改变 |
Event | 通用的条件变量,多个线程可以等待某个事件的发生,在事件发生后,所有的线程都会被激活 |
Semaphore | 为等待锁的线程提供一个类似“等候室”的结构 |
BoundedSemaphore | 与Semaphore类似,只是它不允许超过初始值 |
Timer | 与Thread相似,只是它要等待一段时间后才开始运行 |
用Thread类,我们可以用多种方法来创建线程。一般有三种常见的方法,分别为:
+ 创建一个Thread的实例,传给它一个函数
+ 创建一个Thread的实例,传给它一个可调用的类对象
+ 从Thread派生出一个子类,创建一个这个子类的实例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
# cat mtsleep3.py
#!/usr/bin/env python
import
threading
from
time
import
sleep
, ctime
loops = [4, 2]
def loop(nloop, nsec):
print
'start loop'
, nloop,
'at:'
, ctime()
sleep
(nsec)
print
'loop'
, nloop,
'done at:'
, ctime()
def main():
print
'starting at:'
, ctime()
threads = []
nloops = range(len(loops))
for
i
in
nloops:
t = threading.Thread(target=loop,
args=(i, loops[i]))
threads.append(t)
for
i
in
nloops:
threads[i].start()
for
i
in
nloops:
threads[i].
join
()
print
'all DONE at:'
, ctime()
if
__name__ ==
'__main__'
:
main()
|
所有的线程都创建了之后,再一起调用start()函数启动,而不是创建一个启动一个。而且,不用再管理一堆锁(分配锁、获得锁、释放锁、检查锁的状态等),只要简单地对每个线程调用join()函数就可以了。join()函数会等到线程结束,或者在给了timeout参数的时候,等到超时为止。
运行结果为:
1
2
3
4
5
6
7
|
# python mtsleep3.py
starting at: Wed Sep 23 09:12:48 2015
start loop 0 at: Wed Sep 23 09:12:48 2015
start loop 1 at: Wed Sep 23 09:12:48 2015
loop 1
done
at: Wed Sep 23 09:12:50 2015
loop 0
done
at: Wed Sep 23 09:12:52 2015
all DONE at: Wed Sep 23 09:12:52 2015
|
版权声明:原创作品,如需转载,请注明出处。否则将追究法律责任