一个基于thread模块的多线程脚本

Python关于多线程的模块有thread和threading两个,threading比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
34
35
36
37
38
39
40
41
#coding=utf-8 
#!/usr/bin/python
import thread from time
import sleep
import ctime
loops = [3,5]

#测试函数
def loop(nloop, nsec, lock):
print 'start loop', nloop, 'at:', ctime()
sleep(nsec)
print 'loop', nloop, 'done at:', ctime()
#释放锁
lock.release()

def main():
print 'starting at:', ctime()
locks = []
#生成一个计数列表
nloops = range(len(loops))
#创建一个锁的列表---调用acquire获得锁(把锁锁上)并放入locks列表
for i in nloops:
#分配一个LockType的锁对象
lock = thread.allocate_lock()
#获取锁对象
lock.acquire()
#将锁对象放入列表
locks.append(lock)
#创建带锁的线程,解锁由子线程自己完成
for i in nloops:
#产生一个新的进程
thread.start_new_thread(loop, (i, loops[i], locks[i]))
#暂停主线程,等待所有子线程释放锁
for i in nloops:
#等待子线程释放锁
while locks[i].locked():
pass
print 'all DONE at:', ctime()

if __name__ == '__main__':
main()

thread模块函数如下:
start_new_thread(function,args, kwargs=None) 产生一个新的线程
allocate_lock() 分配一个LockType 类型的锁对象
exit() 让线程退出
LockType 类型锁对象方法:
acquire(wait=None) 尝试获取锁对象
locked() 如果获取了锁对象返回True,否则返回False
release() 释放锁
运行结果:
thread
多线程的最明显的好处就是大大节省了程序运行的时间,比如要执行二个程序,执行时间分别为3s、5s,如果顺序执行则需要8s。而采用多线程技术只需要5s(由执行时间最长的那个程序决定)。

----------------本文结束 感谢阅读----------------