python怎么加锁_python thread模块是如何给线程上锁的?

import thread

from time import sleep

import time

loops = [4, 2]

def loop(nloop, nsec, lock):

print 'start loop', nloop, 'at:', time.ctime()

sleep(nsec)

print 'loop', nloop, 'done at:', time.ctime()

lock.release()

def main():

print 'starting at:', time.ctime()

locks = []

nloops = range(len(loops))

for i in nloops:

lock = thread.allocate_lock() # 标记1

lock.acquire()

locks.append(lock)

for i in nloops:

thread.start_new_thread(loop, (i, loops[i], locks[i])) # 标记2

for i in nloops:

while locks[i].locked(): pass

print 'all end', time.ctime()

main()

以上代码是python核心编程3里面的,在我的注释“标记1”这里,分配了锁对象,接着获取了锁对象,并把锁加入locks里面。

注释“标记2”通过thread模块去创建派生线程,只是把一个锁传给函数,并没有和线程有什么交互,函数运行完,还释放了自己的锁对象。

我看代码给我的感觉就是准备了两个锁,然后创建进程,然后完事了。

我觉得应该有一个过程,指明我的锁是给哪个进程的吧?代码中已经准备好锁池locks了,应该在创建派生线程的时候,拿出一个锁加到这个线程上,但是我没看出这么一个过程。应该如何来理解?是不是分配了锁对象,例如我这里分配了两个,然后创建的线程就自动得到了锁,如果创建第三个的时候就拿不到锁了?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值