【发布时间】:2018-08-29 10:44:12
【问题描述】:
看了比斯利书中的例子后,我正在和我的朋友聊天
class ActorExit(Exception):
pass
class Actor:
def __init__(self):
self._mailbox = Queue()
def send(self, msg):
self._mailbox.put(msg)
def recv(self):
msg = self._mailbox.get()
if msg is ActorExit:
raise ActorExit()
return msg
def close(self):
self.send(ActorExit)
def start(self):
self._terminated = Event()
t = Thread(target=self._bootstrap)
t.daemon = True
t.start()
def _bootstrap(self):
try:
self.run()
except ActorExit:
pass
finally:
self._terminated.set()
def join(self):
self._terminated.wait()
def run(self):
while True:
msg = self.recv()
class PrintActor(Actor):
def run(self):
while True:
msg = self.recv()
print('Got:', msg)
我的朋友认为 Event 的唯一目的是阻塞主线程,直到另一个线程执行 set 操作。 真的吗? 我们如何观察线程执行?
【问题讨论】:
标签: python multithreading concurrency queue python-multithreading