这个例子讲清楚的多进程并发是怎么用的, 现在拿来给大家参考一下, 下面就开始一点一点去分析其中的细节。
由于设计方面存在一定的限制情况, 这里特别指的是目前大家普遍所使用的版本。因此, 其最多只能用满一个核心来处理任务, 具体来说是仅启用中央处理器其中的一个逻辑单元进行运算操作。
提供了非常好用的多进程包, 你只需要定义一个函数,就会替你完成其他所有事情。借助这个包的帮助, 可以轻松的完成由单进程变成并发执行的那种情况。
1、新建单一进程
当我们需要去创建少量的进程的时候, 情况是会这样的, 具体的操作步骤能够被表述为下面的样子:
importmultiprocessing
importtime
deffunc(msg):
foriinxrange(3):
printmsg
time.sleep(1)
if__name__=="__main__":
p=multiprocessing.Process(target=func,args=("hello",))
p.start()
p.join()
print"Sub-processdone."
2、使用进程池
没错, 您看到的内容并不是关于线程池的介绍, 而是另有高招。这项技术能够帮助你将电脑中的所有核心都充分使用起来。同时, 使用的方式也非常简单方便。
请大家留意使用的情况, 如果在代码中遗漏了这个关键字, 那么程序最终就会变回原本那种会产生阻塞效果的执行版本。
这个数值等于4, 它表示的是最多能够同时运行的进程数量。
importmultiprocessing
importtime
deffunc(msg):
foriinxrange(3):
printmsg
time.sleep(1)
if__name__=="__main__":
pool=multiprocessing.Pool(processes=4)
foriinxrange(10):
msg="hello%d"%(i)
pool.apply_async(func,(msg,))
pool.close()
pool.join()
print"Sub-process(es)done."
3、要使用Pool功能, 并且需要对其执行结果予以关注。
在更多的情况下, 我们需要做到的事情不光仅仅是执行多进程, 还要把注意力放在每一个进程的最终的执行成果上面这个具体的样子就是下面所展示出来的这样子的情况。
importmultiprocessing
importtime
deffunc(msg):
foriinxrange(3):
printmsg
time.sleep(1)
return"done"+msg
if__name__=="__main__":
pool=multiprocessing.Pool(processes=4)
result=[]
foriinxrange(10):
msg="hello%d"%(i)
result.append(pool.apply_async(func,(msg,)))
pool.close()
pool.join()
forresinresult:
printres.get()
print"Sub-process(es)done."
希望这篇文字所说的内容, 能够对大伙儿的程序设计工作, 产生一些有帮助的效果。