赞
踩
Python多进程并发(multiprocessing)用法 multiprocessing模块进程操作的相关技巧
实例讲述了Python多进程并发(multiprocessing)用法。分享给大家供大家参考。具体分析如下:
由于Python设计的限制(我说的是咱们常用的CPython)。最多只能用满1个CPU核心。
Python提供了非常好用的多进程包multiprocessing,你只需要定义一个函数,Python会替你完成其他所有事情。借助这个包,可以轻松完成从单进程到并发执行的转换。
1、新建单一进程
如果我们新建少量进程,可以如下:
1
2
3
4
5
6
7
8
9
10
11
|
import
multiprocessing
import
time
def
func(msg):
for
i
in
xrange
(
3
):
print
msg
time.sleep(
1
)
if
__name__
=
=
"__main__"
:
p
=
multiprocessing.Process(target
=
func, args
=
(
"hello"
, ))
p.start()
p.join()
print
"Sub-process done."
|
2、使用进程池
Pool类可以提供指定数量的进程供用户调用,当有新的请求提交到Pool中时,如果池还没有满,就会创建一个新的进程来执行请求。如果池满,请求就会告知先等待,直到池中有进程结束,才会创建新的进程来执行这些请求。
它可以让你跑满多核CPU,而且使用方法非常简单。
注意要用apply_async,如果落下async,就变成阻塞版本了。
processes=4是最多并发进程数量。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
import
multiprocessing
import
time
def
func(msg):
for
i
in
xrange
(
3
):
print
msg
time.sleep(
1
)
if
__name__
=
=
"__main__"
:
pool
=
multiprocessing.Pool(processes
=
4
)
for
i
in
xrange
(
10
):
msg
=
"hello %d"
%
(i)
pool.apply_async(func, (msg, ))
pool.close()
pool.join()
print
"Sub-process(es) done."
|
3、使用Pool,并需要关注结果
更多的时候,我们不仅需要多进程执行,还需要关注每个进程的执行结果,如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
import
multiprocessing
import
time
def
func(msg):
for
i
in
xrange
(
3
):
print
msg
time.sleep(
1
)
return
"done "
+
msg
if
__name__
=
=
"__main__"
:
pool
=
multiprocessing.Pool(processes
=
4
)
result
=
[]
for
i
in
xrange
(
10
):
msg
=
"hello %d"
%
(i)
result.append(pool.apply_async(func, (msg, )))
pool.close()
pool.join()
for
res
in
result:
print
res.get()
print
"Sub-process(es) done."
|
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。