关于multiprocessing.Pool的几个问题
Several questions about multiprocessing.Pool
我最近开始在 python 中学习多处理。对此我有一些疑问。以下代码显示了我的示例:
import multiprocessing
from time import *
def func(n):
for i in range(100):
print(i, "/ 100")
for j in range(100000):
a=j*i
b=j*i/2
if __name__ == '__main__':
#Test with multiprosessing
pool = multiprocessing.Pool(processes=4)
t1 = clock()
pool.map(func, range(10))
pool.close()
t2 = clock()
print(t2-t1)
#Test without multiprocessing
func(range(10))
t3 = clock()
print(t3-t2)
- 这段代码是用了cpu的四核还是我写错了?
- 为什么没有多处理的运行时速度如此之快?有错吗?
- 为什么
print
命令在使用多处理时不起作用?
它确实会一次向您的进程池提交四个进程。您的多处理示例是 运行ning func
十次,而普通调用是 运行ning 一次。此外,启动进程有一些 运行 时间开销。这些可能是造成 运行 次差异的原因。
我认为一个更简单的例子很有启发性。 func
现在休眠五秒钟,然后打印出其输入 n
以及时间。
import multiprocessing
import time
def func(n):
time.sleep(5)
print([n, time.time()])
if __name__ == '__main__':
#Test with multiprosessing
print("With multiprocessing")
pool = multiprocessing.Pool(processes=4)
pool.map(func, range(5))
pool.close()
#Test without multiprocessing
print("Without multiprocessing")
func(1)
pool.map(func, range(5))
运行s func(0)
, func(1)
, ..., func(4)
.
这输出
With multiprocessing
[2, 1480778015.3355303]
[3, 1480778015.3355303]
[1, 1480778015.3355303]
[0, 1480778015.3355303]
[4, 1480778020.3495753]
Without multiprocessing
[1, 1480778025.3653867]
注意前四个是同时输出的,并不是严格按顺序的。第五个 (n == 4
) 在五秒后获得输出,这是有道理的,因为我们有一个包含四个进程的池,并且它只能在前四个完成后才能启动。
我最近开始在 python 中学习多处理。对此我有一些疑问。以下代码显示了我的示例:
import multiprocessing
from time import *
def func(n):
for i in range(100):
print(i, "/ 100")
for j in range(100000):
a=j*i
b=j*i/2
if __name__ == '__main__':
#Test with multiprosessing
pool = multiprocessing.Pool(processes=4)
t1 = clock()
pool.map(func, range(10))
pool.close()
t2 = clock()
print(t2-t1)
#Test without multiprocessing
func(range(10))
t3 = clock()
print(t3-t2)
- 这段代码是用了cpu的四核还是我写错了?
- 为什么没有多处理的运行时速度如此之快?有错吗?
- 为什么
print
命令在使用多处理时不起作用?
它确实会一次向您的进程池提交四个进程。您的多处理示例是 运行ning func
十次,而普通调用是 运行ning 一次。此外,启动进程有一些 运行 时间开销。这些可能是造成 运行 次差异的原因。
我认为一个更简单的例子很有启发性。 func
现在休眠五秒钟,然后打印出其输入 n
以及时间。
import multiprocessing
import time
def func(n):
time.sleep(5)
print([n, time.time()])
if __name__ == '__main__':
#Test with multiprosessing
print("With multiprocessing")
pool = multiprocessing.Pool(processes=4)
pool.map(func, range(5))
pool.close()
#Test without multiprocessing
print("Without multiprocessing")
func(1)
pool.map(func, range(5))
运行s func(0)
, func(1)
, ..., func(4)
.
这输出
With multiprocessing
[2, 1480778015.3355303]
[3, 1480778015.3355303]
[1, 1480778015.3355303]
[0, 1480778015.3355303]
[4, 1480778020.3495753]
Without multiprocessing
[1, 1480778025.3653867]
注意前四个是同时输出的,并不是严格按顺序的。第五个 (n == 4
) 在五秒后获得输出,这是有道理的,因为我们有一个包含四个进程的池,并且它只能在前四个完成后才能启动。