美文网首页
python--线程event

python--线程event

作者: 极光火狐狸 | 来源:发表于2018-09-22 16:57 被阅读5次

    源码: tests/event.py

    # -.- coding:utf-8 -.-
    import unittest
    import threading
    
    
    class TestEvent(unittest.TestCase):
    
        def test_create_event_instance(self):
            event = threading.Event()
            err_msg = u"Event对象默认应该是False."
            self.assertFalse(event.is_set(), err_msg)
    
        def test_set_true_to_event_instance(self):
            event = threading.Event()
            event.set()
    
            err_msg = u"Event被set()之后, 状态应该是True."
            self.assertTrue(event.is_set(), err_msg)
    
        def test_set_false_to_event_instance(self):
            event = threading.Event()
            event.set()
            self.assertTrue(event.is_set())
    
            event.clear()
            self.assertFalse(event.is_set())
    
        def test_sub_pub(self):
            # event是最原始和最简单的事件通知机制.
            # event通知机制的原理是, 其他线程调用event.wait()来等待通知.
            # event通过set()方法把flag改为True, 然后通知所有waiters去做其他事情.
    
            event = threading.Event()
            result = []
    
            def consumer(the_event):
                the_event.wait()
                result.append(threading.current_thread().ident)
    
            t = threading.Thread(target=consumer, args=(event, ))
            t.start()
            self.assertEqual(len(result), 0)
    
            event.set()
            t.join()
            self.assertEqual(len(result), 1)
    
    

     
     

    测试: tests/main.py

    import unittest
    
    
    TEST_MODULE = [
        "ln_threading.tests.event",
    ]
    
    
    if __name__ == '__main__':
        suite = unittest.defaultTestLoader.loadTestsFromNames(TEST_MODULE)
        runner = unittest.TextTestRunner(verbosity=2)
        runner.run(suite)
    
    

    相关文章

      网友评论

          本文标题:python--线程event

          本文链接:https://www.haomeiwen.com/subject/ubdxoftx.html