我正在尝试设置一个Event以便在2个线程之间进行通信,但是该事件从未在第二个线程中设置,这是我到目前为止尝试过的事情:
import multiprocessing
import threading
import time
class Test1(multiprocessing.Process):
def __init__(self, event):
super(Test1, self).__init__()
self.event = event
def run(self):
time.sleep(10)
self.event.set()
print('event set')
class Test2(multiprocessing.Process):
def __init__(self, event):
super(Test2, self).__init__()
self.event = event
def run(self):
while not self.event.isSet():
self.event.wait()
print('event wait ended')
if __name__ == '__main__':
event = threading.Event()
test1 = Test1(event)
test2 = Test2(event)
test1.start()
test2.start()
test1.join()
test2.join()
答案 0 :(得分:1)
在multiprocessing中,您必须使用multiprocessing.Event(),而不是threading.Event()
顺便说一句:并且multiprocessing.Event()
需要is_set()
而不是isSet()
import multiprocessing
import time
class Test1(multiprocessing.Process):
def __init__(self, event):
super().__init__()
self.event = event
def run(self):
time.sleep(3)
self.event.set()
print('event set')
class Test2(multiprocessing.Process):
def __init__(self, event):
super().__init__()
self.event = event
def run(self):
while not self.event.is_set(): # <--- `is_set()` instead of `isSet()`
self.event.wait()
print('event wait ended')
if __name__ == '__main__':
event = multiprocessing.Event() # <--- `multiprocessing` isntead of `threading`
test1 = Test1(event)
test2 = Test2(event)
test1.start()
test2.start()
test1.join()
test2.join()