python3多线程是否需要加锁,python多线程锁的使用

  python3多线程是否需要加锁,python多线程锁的使用

  领先优势

  如果几个线程一起修改一些数据,可能会导致意想不到的结果。为了保证数据的准确性,必须同步多个线程。

  简单的线程同步可以通过使用线程对象的Lock和Rlock来实现。这两个对象都有获取和释放方法。对于一次只能处理一个线程的数据,这些操作可以放在获取和释放方法之间。如下图。

  多线程的优点是可以同时执行多个任务。但如果线程需要共享数据,可能会出现数据不同步的问题。

  假设一个列表中的所有元素都是0,线程“set”将所有元素从后向前改为1,线程“print”从前向后读取并打印列表。

  在中,当线程“set”开始变化时,线程“print”将打印列表,输出可能减半。这就是数据异步。为了避免这种情况,引入了锁定的概念。

  有——种锁定和解锁状态。每次一个线程(比如“set”)访问共享数据,都要先获取锁。如果另一个线程(如“打印”)被锁定,请暂停线程“设置”。也就是说,它是一个同步块。在线程“print”被访问并解锁后,让线程“set”继续。

  经过这样的处理,在打印列表的时候,不是全0就是全1输出,不会出现半0半1的尴尬场景。

  示例:

  #!/usr/凶翼/python3

  导入教程

  导入时间

  classmythread(threading.thread):

  def __init__(self,threadID,name,counter):

  threading.Thread.__init__(self)

  self.threadID=threadID

  self.name=name

  self .计数器=计数器

  defrun(自身) :

  Print (open thread: self.name))。

  #获取线程同步的锁

  threadLock.acquire(

  Print _ time (self.name,self.counter,3))。

  #解锁并打开下一个线程

  threadLock.release(

  defprint_time(线程名,延迟,计数器) :

  当计数器:

  时间.睡眠(戴尔)

  print(%s:%s ) % ) threadname,time.ctime (time.time))

  计数器=1

  threadLock=线程。锁定(

  线程=[]

  #创建一个新线程

  thread1=mythread(1, Thread-1 ,1)).

  thread2=mythread(2, Thread-2 ,2)).

  #打开一个新线程

  thread1.start(

  线程2.start(

  #将线程添加到线程列表中

  threads.append(thread1)).

  threads.append(thread2))。

  #等待所有线程完成

  对于螺纹中的t:

  t.join())).

  Print("退出主线程"))。

  执行上述步骤后,输出结果如下。

  开放线程:线程1

  开放线程:线程2

  线索1:2016年4月6日星期三13360523360572016

  线索1:2016年4月6日星期三13360523360582016

  线程-1:2016年4月61日周三13360523360592016

  线程2:周三2016年4月61133605:012016

  线程2:周三2016年4月61133605:032016

  线程2:周三2016年4月61133605:052016

  结束主线程

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: