线程之间的事件通信

时间:2020-07-15 01:59:32

标签: python python-3.x multithreading events

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

1 个答案:

答案 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()
相关问题