首次运行时的 Python 多处理开销
Posted
技术标签:
【中文标题】首次运行时的 Python 多处理开销【英文标题】:Python multiprocessing overhead when running for the first time 【发布时间】:2019-01-16 08:14:30 【问题描述】:为什么第一次运行 Python 多处理池时开销要高得多? 与以下运行相比有什么不同?
import pandas as pd
import time
import multiprocessing
def foo(n):
for i in range(n):
for j in range(n):
for k in range(n):
accum = i + j + k
return(accum)
def test1(pool, n):
pool.map(foo, [n, n])
def test2(n):
foo(n)
foo(n)
if __name__ == "__main__":
rtn = []
pool = multiprocessing.Pool(processes=2)
for n in range(100, 1100, 100):
startTime = time.time()
test1(pool, n)
t1 = time.time() - startTime
print('t1: 0 second'.format(time.time() - startTime))
startTime = time.time()
test2(n)
t2 = time.time() - startTime
print('t2: 0 second'.format(time.time() - startTime))
rtn.append([n, t1, t2])
xx = pd.DataFrame(rtn, columns=['n', 't1', 't2'])
print(xx)
n t1 t2
0 100 3.843944 0.106006 <-------- t1 is much longer than t2
1 200 0.640689 1.000097
2 300 2.526334 4.140915
3 400 6.880183 11.183931
4 500 14.937281 25.981793
5 600 27.315186 39.802715
6 700 41.263902 60.289115
7 800 64.577426 95.624465
8 900 90.760957 132.725434
9 1000 120.575304 177.576586
【问题讨论】:
Find this SO post回答了这个问题。 ***.com/questions/1289813/… 【参考方案1】:这是因为必须先创建池。所以python必须告诉操作系统创建子进程(在你的例子中是2)。一旦这些进程处于活动状态,python 就可以利用它们并处理您提交到池的任务。顺便说一句,完成后你应该close
游泳池。
我喜欢三循环 cpu-stresser!希望我能解决你的问题!
【讨论】:
以上是关于首次运行时的 Python 多处理开销的主要内容,如果未能解决你的问题,请参考以下文章
使用TensorFlow-GPU + Python多处理时的错误?