Python 中多线程之 _thread

_thread模块是python 中多线程操作的一种模块方式,主要的原理是派生出多线程,然后给线程加锁,当线程结束的 时候取消锁,然后执行主程序

                             

thread 模块和锁对象的说明
start_new_thred(function,args,kwargs=none) 派生一个新的线程,使用给定的argvs,和可选的kwargs 来执行function
allocate_lock() 分配locktype 锁对象
exit() 给线程退去指令
   
 locktype   锁对象的方法
qcquire(wait=none) 尝试获取锁对象
Locked() 如果获取了锁对象则返回true ,否则false
release() 释放锁
   

                                                                                                程序的代码

 1 #!/usr/bin/python
 2 from  time import  sleep,ctime
 3 import   _thread
 4 loops=[4,2]           #定义任务的时间长短
 5 def   loop(nloop,nsec,lock): # nloop 任务的名称  nesc  任务执行的时间   lock  锁
 6     print ('loop',nloop,'start at:', ctime())  #输出任务的开始的时间
 7     sleep(nsec) # 任务的执行时间
 8     print('loop',nloop, 'done  at:',ctime())#输出任务的结束时间
 9     lock.release() #释放任务的锁
10 def  main():
11     print ('starting at:',ctime()) #开始执行任务的当前时间
12     locks=[] # 定义一个空的锁列表
13     nloops=range(len(loops))  #主要作用是为了下面循环区分具体的任务
14     
15     for i  in  nloops:
16         lock=_thread.allocate_lock() #给任务加上锁
17         lock.acquire()#获取锁对象
18         locks.append(lock) #把具体的锁对象加到锁列表里面去
19     for i in nloops:#循环时间长短
20         _thread.start_new_thread(loop,(i, loops[i],locks[i]))  #派生出两个新的线程  并传递给循环,其中loops[i]传递给 nesc ,locks[i] 传递给   lock
21     for i in nloops:# 循环时间长短
22         while locks[i].locked():#判断派生的线程有没有锁,,如果有暂停主线程,直到所有的锁都释放了才会执行主线程
23             pass
24     print ('all doneat:', ctime())        
25             
26     
27 if __name__ == '__main__': #执行函数
28     main()
29     任务执行的结果

 关于给任务加锁的说明  (第一个for 循环)

任务执行的结果

 

关于程序的思路流程:

 

 导入时间模块


 导入 _thread  模块


定义一个任务时间长短列表    


 执行mian 函数  

输出开始执行的时间

 

定义空的锁列表


第一个循环主要是获取锁对象,给任务加上锁 把具体的锁对象加到锁列表里面去


 第二个循环主要的作用是派生出两个新的线程。执行,loop函数,传递参数给 loop 函数

判断线程有没有锁。如果有暂定主线程,没有的话  执行下面代码结束输入

posted @ 2016-07-28 17:49  下丶雨天  阅读(564)  评论(0编辑  收藏  举报