Python多线程同步,,对Python多线程
Python多线程同步,,对Python多线程
对Python多线程实现同步机制及其遇到的一些问题。本文给出了样例代码 ,主要包括Condition,Event and Queue三种机制
1. 锁机制
threading的Lock类,用该类的acquire函数进行加锁,用realease函数进行解锁,当一个线程调用锁的acquire()方法获得锁时,锁就进入“locked”状态。每次只有一个线程可以获得锁。如果此时另一个线程试图获得这个锁,该线程就会变为“blocked”状态,称为“同步阻塞”
在此没有给出样例后面条件
2.条件Contidion
代码段:
classReader(threading.Thread):
def__init__(self,condition,data):
threading.Thread.__init__(self)
self.condition=condition
self.data=data
pass
defrun(self):
whileTrue:
withself.condition:
print("waiting...")
self.condition.wait()
msg=self.data.pop()
if"exit"==str(msg).lower():
print("exit")
break
print("readdate:{}".format(msg))
deftest_condition():
condition=threading.Condition()
dl=[]
reader=Reader(condition,dl)
reader.daemon=True
reader.start()
whileTrue:
withcondition:
msg=input("输入:")
dl.append(msg)
print("notify...")
condition.notifyAll()
if"exit"==msg.lower():
break
time.sleep(0.012)
2.事件Event
代码段:
classReader2(threading.Thread):def__init__(self,event,data):threading.Thread.__init__(self)self.event=eventself.data=datapassdefrun(self):whileTrue:print("waiting...")self.event.wait()msg=self.data.pop()if"exit"==str(msg).lower():print("exit")breakprint("readdate:{}".format(msg))
deftest_event():event=threading.Event()dl=[]
reader2=Reader2(event,dl)reader2.daemon=Truereader2.start()
whileTrue:msg=input("输入:")dl.append(msg)print("notify...")event.set()event.clear()
if"exit"==msg.lower():breaktime.sleep(0.012)pass
2.队列Queue
代码段:
classReader3(threading.Thread):def__init__(self,queue):threading.Thread.__init__(self)self.queue=queuedefrun(self):whileTrue:print("waiting...")msg=self.queue.get()print("readdata:{}".format(msg))if"exit"==msg.lower():breakself.queue.task_done()passdeftest_queue():q=queue.Queue()
reader3=Reader3(q)reader3.daemon=Truereader3.start()
whileTrue:msg=input("输入:")q.put(msg)print("notify...")time.sleep(0.01)if"exit"==msg.lower():breakpass
参考文档:https://zhuanlan.zhihu.com/p/27963810
Python多线程同步
评论关闭