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

Python关于多线程的模块有thread和threading两个,threading比thread模块更先进功能更完善,thread模块更接近线程的底层结构。一个比较简单的thread模块的实例:

#coding=utf-8
#!/usr/bin/python

import thread
from time import sleep, 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(由执行时间最长的那个程序决定)。

转载请注明出处: http://www.xiaomastack.com/2014/07/14/pythonthread/ 谢谢!

发表评论:

你的电子邮件地址将不会被公开.

+ 87 = 89