0

我正在尝试设置一个事件以在 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()

4

1 回答 1

1

多处理中,您必须使用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()
于 2020-07-15T04:26:54.130 回答