All existing examples of threading.Condition and threading.Event present in internet are to solve producer consumer issue. But this can be done using either of them. Only advantage of Condition I have found is - it supports two types of notify function (notify and notifyAll)
Here I have easily replicated an existing example of Condition to Event. the Condition example is taken from here
Example using Condition:
def consumer(cv):
    logging.debug('Consumer thread started ...')
    with cv:
        logging.debug('Consumer waiting ...')
        cv.wait()
        logging.debug('Consumer consumed the resource')
def producer(cv):
    logging.debug('Producer thread started ...')
    with cv:
        logging.debug('Making resource available')
        logging.debug('Notifying to all consumers')
        cv.notifyAll()
if __name__ == '__main__':
    condition = threading.Condition()
    cs1 = threading.Thread(name='consumer1', target=consumer, args=(condition,))
    cs2 = threading.Thread(name='consumer2', target=consumer, args=(condition,))
    pd = threading.Thread(name='producer', target=producer, args=(condition,))
    cs1.start()
    time.sleep(2)
    cs2.start()
    time.sleep(2)
    pd.start()
Example using Event:
def consumer(ev):
    logging.debug('Consumer thread started ...')
    logging.debug('Consumer waiting ...')
    ev.wait()
    logging.debug('Consumer consumed the resource')
def producer(ev):
    logging.debug('Producer thread started ...')
    logging.debug('Making resource available')
    logging.debug('Notifying to all consumers')
    ev.set()
if __name__ == '__main__':
    event = threading.Event()
    cs1 = threading.Thread(name='consumer1', target=consumer, args=(event,))
    cs2 = threading.Thread(name='consumer2', target=consumer, args=(event,))
    pd = threading.Thread(name='producer', target=producer, args=(event,))
    cs1.start()
    time.sleep(2)
    cs2.start()
    time.sleep(2)
    pd.start()
Output:
(consumer1) Consumer thread started ...
(consumer1) Consumer waiting ...
(consumer2) Consumer thread started ...
(consumer2) Consumer waiting ...
(producer ) Producer thread started ...
(producer ) Making resource available
(producer ) Notifying to all consumers
(consumer1) Consumer consumed the resource
(consumer2) Consumer consumed the resource
Can someone give an example which is possible by using Condition but not by Event?
 
    