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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。