python学习—Day42—多进程Manager,进程池

来源:互联网 发布:mac10.7.5版本软件 编辑:程序博客网 时间:2024/05/22 01:47

多进程的Manager:

强大的Manager:;python中提供了强大的Manager专门用来做数据共享的,其支持的类型非常多,包括,value,array,list,dict,queue,lock等。

例子:
#@File :jincheng_manager.pyimport multiprocessingdef worker(d, l):    l += range(11, 16)    for i in xrange(1, 6):        key = "key{0}".format(i)        val = "val{0}".format(i)        d[key] = valif __name__ == "__main__":    manager = multiprocessing.Manager()    d = manager.dict()    l = manager.list()    p = multiprocessing.Process(target=worker, args=(d, l))    p.start()    p.join()    print(d)    print(l)    print("main end")
{'key3': 'val3', 'key2': 'val2', 'key1': 'val1', 'key5': 'val5', 'key4': 'val4'}
[11, 12, 13, 14, 15]
main end


多进程的进程池:

pool可以提供指定数量的进程,供用户调用,当有新的请求提交到pool中时,如果池还没有满,那么就会创建一个新的进程用来执行该请求;但如果池中的进程数已经达到规定的最大值,那么该请求就会等待,直到池中有进程结束,才会创建新的进程。

#@File :pool.pyimport multiprocessingimport timedef worker(msg):    print("###########  start {0}  ##########".format(msg))    time.sleep(1)    print("###########  end {0}  ##########".format(msg))if __name__ == "__main__":    pool = multiprocessing.Pool(processes=3)    for i in xrange(1, 10):        msg = "hello {0}".format(i)        pool.apply_async(func=worker, args=(msg, ))        # pool.apply(func=worker, args=(msg, ))         #这句与上面一句区别:上面是非阻塞,最大限度利用pool,这句是只开一个窗口。    pool.close()    pool.join()         #join之前一定要close,否则报错。    print("main end")
###########  start hello 1  ##########
###########  start hello 2  ##########
###########  start hello 3  ##########
###########  end hello 2  ##########
###########  end hello 1  ##########
###########  start hello 4  ##########
###########  start hello 5  ##########
###########  end hello 3  ##########
###########  start hello 6  ##########
###########  end hello 4  ##########
###########  end hello 5  ##########
###########  start hello 7  ##########
###########  start hello 8  ##########
###########  end hello 6  ##########
###########  start hello 9  ##########
###########  end hello 7  #####################  end hello 8  ##########


###########  end hello 9  ##########
main end


原创粉丝点击