北风留影 发表于 2018-8-10 12:42:42

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]
查看完整版本: python-thread & threading-f1yinsky