day10-进程锁+进程池

进程锁:

from multiprocessing import Process, Lock
def f(l, i):
    l.acquire()
    print('hello world', i)
    l.release()
if __name__ == '__main__':
    lock = Lock()
    for num in range(100):
        Process(target=f, args=(lock, num)).start()
   # 数据无乱序打印

进程池:

from  multiprocessing import Process, Pool,freeze_support
import time
import os
def Foo(i):
    time.sleep(2)
    print("in process",os.getpid())
    return i + 100
def Bar(arg):
    print('-->exec done:', arg,os.getpid())

if __name__ == '__main__':
    #freeze_support()
    pool = Pool(processes=5) #允许进程池同时放入5个进程
    print("主进程",os.getpid())
    for i in range(10):
        pool.apply_async(func=Foo, args=(i,), callback=Bar) #callback=回调
        #pool.apply(func=Foo, args=(i,)) #串行
        #pool.apply_async(func=Foo, args=(i,)) #并行
    print('end')
    pool.close()
    pool.join() #进程池中进程执行完毕后再关闭,如果注释,那么程序直接关闭。.join()
# 主进程 13008
# end
# in process 10960
# -->exec done: 100 13008
# in process 12656
# -->exec done: 101 13008
# in process 9144
# -->exec done: 102 13008
# in process 10316
# -->exec done: 103 13008
# in process 11188
# -->exec done: 104 13008
#

 

posted @ 2017-11-06 22:21  雷大侠!  阅读(127)  评论(0编辑  收藏  举报