说明
文章首发于HURUWO的博客小站,本平台做同步备份发布。
如有浏览或访问异常图片加载失败或者相关疑问可前往原博客下评论浏览。
原文链接 python多线程(2)–thread和threading模块的使用直接点击即可前往访问。
更多技术文章访问本人博客HuRuWo的技术小站,包括Android 逆向 app,闲鱼爬虫 微信爬虫 抖音爬虫 群控 等相关知识
前言
thread模块
python不推荐使用这个模块,推荐更高级的threading。
thread模块和对象
函数 | 描述 |
---|---|
start_new_thread(function,args) | 产生新线程,指定函数和参数 |
allocate_lock() | 分配一个LockType类型的锁对象 |
exit() | 线程退出 |
LockType对象的方法 | |
acquire() | 尝试获取对象对象 |
locked | 如果获取了返回True否则返回False |
release() | 释放锁 |
thread.py
#coding:utf-8
import thread
from time import sleep,ctime
loops=[4,2]#睡眠时间
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))#创建nloops数组
#创建锁并加入组
for i in nloops:
lock=thread.allocate_lock()#创建 lock (不能直接加入)
lock.acquire()#尝试获取lock
locks.append(lock)#加入组
for i in nloops:
thread.start_new_thread(loop,(i,loops[i],locks[i]))#创建线程
#获取锁对象 成功True 失败False
for i in nloops:
while locks[i].locked():pass#如果锁对象被释放 表示解锁了 可以继续执行
print 'all DONE at:',ctime()
if __name__ == '__main__':
main()
输出:
starting at : Tue Jul 19 20:23:29 2016
start loop start loop0 1at: at:Tue Jul 19 20:23:29 2016
Tue Jul 19 20:23:29 2016
loop 1 done at: Tue Jul 19 20:23:31 2016
loop 0 done at: Tue Jul 19 20:23:33 2016
all DONE at: Tue J