Python 中多线程之 _thread
_thread模块是python 中多线程操作的一种模块方式,主要的原理是派生出多线程,然后给线程加锁,当线程结束的 时候取消锁,然后执行主程序
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 函数
。
判断线程有没有锁。如果有暂定主线程,没有的话 执行下面代码结束输入