[code.view]

[top] / python / PyMOTW / multiprocessing / multiprocessing_condition.py

     #!/usr/bin/env python
     # encoding: utf-8
     #
     # Copyright (c) 2008 Doug Hellmann All rights reserved.
     #
     """Using a Condition to control sequencing between workers.
     """
     #end_pymotw_header
     import multiprocessing
     import time
     
     def stage_1(cond):
         """perform first stage of work, then notify stage_2 to continue"""
         name = multiprocessing.current_process().name
         print 'Starting', name
         with cond:
             print '%s done and ready for stage 2' % name
             cond.notify_all()
     
     def stage_2(cond):
         """wait for the condition telling us stage_1 is done"""
         name = multiprocessing.current_process().name
         print 'Starting', name
         with cond:
             cond.wait()
             print '%s running' % name
     
     if __name__ == '__main__':
         condition = multiprocessing.Condition()
         s1 = multiprocessing.Process(name='s1', target=stage_1, args=(condition,))
         s2_clients = [
             multiprocessing.Process(name='stage_2[%d]' % i, target=stage_2, args=(condition,))
             for i in range(1, 3)
             ]
     
         for c in s2_clients:
             c.start()
             time.sleep(1)
         s1.start()
     
         s1.join()
         for c in s2_clients:
             c.join()
     

[top] / python / PyMOTW / multiprocessing / multiprocessing_condition.py

contact | logmethods.com