【发布时间】:2017-02-19 17:09:19
【问题描述】:
我在 python 中定义了两种计算平均值的正确方法。
def avg_regular(values):
total = 0
for value in values:
total += value
return total/len(values)
def avg_concurrent(values):
mean = 0
num_of_values = len(values)
for value in values:
#calculate a small portion of the average for each num and add to the total
mean += value/num_of_values
return mean
第一个函数是计算平均值的常规方法,但我编写了第二个函数,因为循环的每次运行不依赖于之前的运行。所以理论上可以并行计算平均值。
但是,“并行”(没有并行运行)比普通的要多花大约 30% 的时间。
我的假设是否正确并且值得失去速度? 如果是,我怎样才能让第二个函数并行运行第二个函数?
如果不是,我哪里做错了?
【问题讨论】:
-
异步是什么意思?在 python asyncio 中执行异步 IO,但这并不能真正帮助您。您想加快计算速度吗?查看 numpy.如果您想在多个内核上运行,请查看多处理(python 线程不能同时运行 python 代码)。你的第二个版本做了更多的工作(每次除法和加法),所以我认为它需要更多时间并不令人惊讶。
-
@syntonym 对不起,我的意思是并行而不是异步,就像在多个线程中运行一样。我将如何为此使用多进程?
-
Ofc 第二个比较慢。更多的部门!
-
您是追求速度还是只是想了解并行处理的多处理/计算?
-
@syntonym 我试图理解,但多处理的好处不是加快了速度吗?
标签: python python-3.x concurrency multiprocessing python-multiprocessing