python使用锁访问共享变量实例解析的方法

来源:网络时间:2018-02-09 10:10:47

  本文研究的主要是Python使用锁访问共享变量,具体介绍和实现如下。

python使用锁访问共享变量实例解析的方法

  python 做多线程编程时,多个线程若同时访问某个变量,可能会对变量数据造成破坏,pyhon中的threading模块提供了lock对象,lock中的acquire方法用于获取一个锁,而release用于释放一个锁。当一个线程取得锁时,它变获得了共享变量的访问权,此时进入阻塞状态,若其它线程申请访问这个变量,则必须等到这个线程调用release方法释放这个锁。下面是python中使用锁的实例:

?

1

2
3
4

5
6
7
8
9
10
11
12
13
#!/usr/bin/env python
Stream Vera Sans Mono', 'Courier New', Courier, monospace !important; float: none !important; border-top-width: 0px !important; border-bottom-width: 0px !important; height: auto !important; color: rgb(0, 102, 153) !important; vertical-align: baseline !important; overflow: visible !important; top: auto !important; right: auto !important; font-weight: bold !important; left: auto !important; background-image: initial; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;" class="py keyword">import threading,TIMe
q=threading.Lock()  #create a lock object
def mythread():
  global a
  q.acquire()   #acquire the lock
  a=threading.currentThread().getName()
  print "a is modified by",a
  q.release()   #release the lock
    
for i in range(1,4):
  t=threading.Thread(target=mythread,name="Thread %d"%i)
  t.start()

  如果一个线程想多次获取资源访问权,在上面的程序中连续两次使用acquire() ,将会造成死锁现象,因为第一次申请到的资源还没有来得及释放,就进行了第二次申请。python中的threading模块提供了可重入锁RLock,RLock提供了计数器。一个线程申请到某个资源,计数器会加1,释放掉这个资源计数器会减1.这样,一个线程可以多次请求同一个资源,在所有请求都被释放后,其它线程才允许获取这个锁。上面的代码做简单修改,可得:

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/env python
import threading,time
q=threading.RLock()    #create a lock object
def mythread():
  global a
  q.acquire()    #acquire the lock
  a=threading.currentThread().getName()
  print "a is modified by",a
  q.acquire()
  a=threading.currentThread().getName()
  print "a is modified by %s the second time"% a
  q.release()   
  q.release()    #release the lock
for i in range(1,4):
  t=threading.Thread(target=mythread,name="Thread %d"%i)
  t.start()

  总结

  以上就是本文关于python使用锁访问共享变量实例解析的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

文章内容来源于网络,不代表本站立场,若侵犯到您的权益,可联系我们删除。(本站为非盈利性质网站) 联系邮箱:9145908@qq.com
最新攻略
1()是人的心理活动的稳定性特征,它决定了消费者购买的不同风格。 2()是为了保证企业生产经营活动的顺利进行而制定的工作秩序和规定,企业制度集中体现了企业理念对企业组织和员工行为的要求,是企业行为识别系统策划中基本和主要的内容 3()是个性对现实稳定了态度和习惯化的行为方式,它影响着消费者购买行为的倾向性。 4()是一种重要的肌理元素。排版后的文字可同时传达明暗、肌理和内容。 5()是一种知觉活动,知觉活动是一种积极探索、选择的活动,它所涉及的是一种外部力对有机体的作用,从而打乱了神经系统的平衡的总过程。 6()是一种独特的视觉审美形式,是美学意境上的升华。 7()是一种前瞻性的评价,正是在创意过程中有了这种评价的存在,创意人员才能更明确创意的宗旨和目的,才能够将创意这个手段更好地服务于其目的。这段话表明的是广告创意评价中的哪一标准 8()是一种具有开创意义的思维活动的,即开拓人类认识新领域、开创人类认识新成果的思维活动。 9()是一切说服的前提,却又是当代信息传播中的最大难题。 10()是一切文学品种的特征。 11()是OR模型中最费时间的部分。 12()早在孔子以前已是周代官府的典籍,是记述礼乐制度和进行礼乐教育的教科书。