python-thread & threading-f1yinsky
# 4、线程加锁方法# 那么,有什么好的管理线程的方法呢?而不是在主线程里做个额外的延时6秒操作。因为总的运行时间并不比单线程的代码少;
# 而且使用sleep()函数做线程的同步操作是不可靠的;如果循环的执行时间不能事先确定的话,这可能会造成主线程过早或过晚的退出。
# 这就需要引入锁的概念。下面代码执行loop函数,与前面代码的区别是不用为线程什么时候结束再做额外的等待了。
# 使用锁之后,可以在两个线程都退出后,马上退出。
#coding=utf-8
import thread
from time import sleep, ctime
loops = #等待时间
#锁序号 等待时间 锁对象
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)) #以loops数组创建列表并赋值给nloops
for i in nloops:
lock = thread.allocate_lock() #创建锁对象
lock.acquire() #获取锁对象 加锁
locks.append(lock) #追加到locks[]数组中
#执行多线程 (函数名,函数参数)
for i in nloops:
thread.start_new_thread(loop,(i,loops,locks))
#循环等待顺序检查每个所都被解锁才停止
for i in nloops:
while locks.locked():
pass
print 'all end:', ctime()
if __name__ == '__main__':
main()
页:
[1]