思南1900

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

进程同步

Without using the lock output from the different processes is liable to get all mixed up.

 

from multiprocessing import Process, Lock

def f(l, i):
  
    with l.acquire():
        print('hello world %s'%i)

if __name__ == '__main__':
    lock = Lock()

    for num in range(10):
        Process(target=f, args=(lock, num)).start()

进程池

进程池内部维护一个进程序列,当使用时,则去进程池中获取一个进程,如果进程池序列中没有可供使用的进进程,那么程序就会等待,直到进程池中有可用进程为止。

进程池中有两个方法:

  • apply
  • apply_async
  • from  multiprocessing import Process,Pool
    import time,os
    
    def Foo(i):
        time.sleep(1)
        print(i)
        return i+100
    
    def Bar(arg):
    
        print(os.getpid())
        print(os.getppid())
        print('logger:',arg)
    
    pool = Pool(5)
    
    Bar(1)
    print("----------------")
    
    for i in range(10):
        #pool.apply(func=Foo, args=(i,))
        #pool.apply_async(func=Foo, args=(i,))
        pool.apply_async(func=Foo, args=(i,),callback=Bar)
    
    pool.close()
    pool.join()
    print('end')
 
posted on 2018-02-03 20:32  思南1900  阅读(48)  评论(0编辑  收藏  举报