普通 python 代码和多处理中的相同代码之间的时间差是多少?
Posted
技术标签:
【中文标题】普通 python 代码和多处理中的相同代码之间的时间差是多少?【英文标题】:What is the time difference between a normal python code and the same code in multiprocessing? 【发布时间】:2019-07-08 12:45:40 【问题描述】:我试图清楚地了解单个进程中的功能和多核中的相同功能的区别。以下普通 python 代码和多处理器代码给出了相同的时间(大约)。我使用多处理错误吗?
普通 Python 代码:
import time
def basic_func(x):
if x == 0:
return 'zero'
elif x % 2 == 0:
return 'even'
else:
return 'odd'
def multiprocessing_func(x):
y = x * x
print(' squared results in a/an number'.format(x, basic_func(y)))
if __name__ == '__main__':
starttime = time.time()
for each in range(0, 1000):
multiprocessing_func(each)
print('That took seconds'.format(time.time() - starttime))
多处理代码:
import time
import multiprocessing
def basic_func(x):
if x == 0:
return 'zero'
elif x % 2 == 0:
return 'even'
else:
return 'odd'
def multiprocessing_func(x):
y = x * x
print(' squared results in a/an number'.format(x, basic_func(y)))
if __name__ == '__main__':
starttime = time.time()
pool = multiprocessing.Pool()
pool.map(multiprocessing_func, range(0, 1000))
pool.close()
print('That took seconds'.format(time.time() - starttime))
提前致谢! 代码来源:This tutorial
【问题讨论】:
您忘记添加time.sleep(2)
(来自该示例)
要并行化的目标函数非常简单。进程管理和 python 解释器等的开销将明显大于执行实际“工作”所需的时间。将 multprocessing_func 变成实际上需要很长时间的东西,例如time.sleep(10)
而不是 y = x * x
。
@TomDalton,好吧,你的意思是说,除非执行我们的功能所花费的时间明显更长,否则多处理通常会因为进程管理而变慢。
是的,完全正确
【参考方案1】:
在没有多处理的情况下,我在 0.07 秒内执行了这段代码。多处理版本耗时 0.28 秒。创建一些进程池需要一些时间,而且可能不值得。
我建议不要在此过程中打印,因为它可能会产生漏斗效应(I/O 始终是并发进程的问题)
稍微修改一下你的代码:
import time
import multiprocessing
def basic_func(x):
if x == 0:
return 'zero'
elif x % 2 == 0:
return 'even'
else:
return 'odd'
def multiprocessing_func(x):
y = x * x
return basic_func(y)
并比较结果:
starttime = time.time()
for each in range(0, 100000000):
multiprocessing_func(each)
print('That took seconds'.format(time.time() - starttime))
耗时 34 秒
starttime = time.time()
pool = multiprocessing.Pool(processes=10)
pool.map(multiprocessing_func, range(0, 100000000))
pool.close()
print('That took seconds'.format(time.time() - starttime))
耗时 9.6 秒
看到“相同”的问题产生了截然不同的结果。回答您的问题是不可能的,这在很大程度上取决于最初的问题、漏斗效应以及任务持续时间与创建流程池的成本之间的平衡。
【讨论】:
谢谢!这清楚地解释了。当我们的目标功能较小时,创建流程和流程管理的成本不可忽略。以上是关于普通 python 代码和多处理中的相同代码之间的时间差是多少?的主要内容,如果未能解决你的问题,请参考以下文章