import logging
import threading
import time
logging.basicConfig(level=logging.DEBUG, format='%(threadName)s: %(message)s')
def worker1(condition):
    with condition:
        condition.wait()  #notifyAllが呼ばれるまで待機
        logging.debug('start')
        time.sleep(3)
        logging.debug('end')
def worker2(condition):
    with condition:
        condition.wait()  #notifyAllが呼ばれるまで待機
        logging.debug('start')
        time.sleep(3)
        logging.debug('end')
def worker3(condition):
    with condition:
        logging.debug('start')
        time.sleep(3)
        logging.debug('end')
        condition.notifyAll()
if __name__ == '__main__':
    condition = threading.Condition()
    t1 = threading.Thread(target=worker1, args=(condition,))
    t2 = threading.Thread(target=worker2, args=(condition,))
    t3 = threading.Thread(target=worker3, args=(condition,))
    t1.start()
    t2.start()
    t3.start()