python下的manage和进程池实例讲解
程序员文章站
2022-06-22 13:45:56
Manage
以上实现的数据共享的方式只有两种结构Value和Array。Python中提供了强大的Manage专门用来做数据共享的,其支持的类型非常多,包括,Value, Ar...
Manage
以上实现的数据共享的方式只有两种结构Value和Array。Python中提供了强大的Manage专门用来做数据共享的,其支持的类型非常多,包括,Value, Array,list,dict, Queue, Lock等。
示例:
import multiprocessing def worker(dic,list): list += range(11,16) for i in xrange(1,6): key ="key{0}".format(i) val = "val{0}".format(i) dic[key]=val # print "##" if __name__ =='__main__': mamager=multiprocessing.Manager() d=mamager.dict() l=mamager.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中时,如果池还没有满,那么就会创建一个新的进程用来执行该请求;但如果池中的进程数已经达到规定最大值,那么该请求就会等待,直到池中有进程结束,才会创建新的进程。
阻塞和非阻塞的区别:
Pool.apply_async 非阻塞,定义的进程池进程最大数可以同时执行。
Pool.apply 一个进程结束,释放回进程池,下一个进程才可以开始
import multiprocessing import time def worker(msg): print ("####start {0}####").format(msg) time.sleep(1) print ("####end {0}#####").format(msg) if __name__ =="__main__": print ("main start ") pool =multiprocessing.Pool(processes=3) for i in xrange(1,6): msg = "hello {0}".format(i) pool.apply_async(func=worker,args=(msg,)) pool.close() pool.join() print("main end")
结果:
main start
start hello 1
start hello 2
start hello 3
end hello 1
start hello 4
end hello 3#########end hello 2
start hello 5
end hello 4
end hello 5
main end
上一篇: 页面乱码解决4种方案
下一篇: JSP中表单数据存储的一种通用方法
推荐阅读
-
Python 多进程并发操作中进程池Pool的实例
-
python pandas库中DataFrame对行和列的操作实例讲解
-
对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解
-
mac下给python3安装requests库和scrapy库的实例
-
Anaconda下配置python+opencv+contribx的实例讲解
-
python多进程中的内存复制(实例讲解)
-
Python中单线程、多线程和多进程的效率对比实验实例
-
python中socket、进程、线程、协程、池的创建方式和应用场景
-
python中Array和DataFrame相互转换的实例讲解
-
python下的manage和进程池实例讲解