【问题标题】:Event communication between threads线程之间的事件通信
【发布时间】:2020-07-15 01:59:32
【问题描述】:

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

【问题讨论】:

    标签: python python-3.x multithreading events


    【解决方案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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多