我正在尝试在 python 下运行并行进程(在 ubuntu 上)。
我开始使用多处理,它适用于简单的示例。
然后出现了泡菜错误,所以我切换到悲情。我对不同的选项有点困惑,所以写了一个非常简单的基准测试代码。
import multiprocessing as mp
from pathos.multiprocessing import Pool as Pool1
from pathos.pools import ParallelPool as Pool2
from pathos.parallel import ParallelPool as Pool3
import time
def square(x):
# calculate the square of the value of x
return x*x
if __name__ == '__main__':
dataset = range(0,10000)
start_time = time.time()
for d in dataset:
square(d)
print('test with no cores: %s seconds' %(time.time() - start_time))
nCores = 3
print('number of cores used: %s' %(nCores))
start_time = time.time()
p = mp.Pool(nCores)
p.map(square, dataset)
# Close
p.close()
p.join()
print('test with multiprocessing: %s seconds' %(time.time() - start_time))
start_time = time.time()
p = Pool1(nCores)
p.map(square, dataset)
# Close
p.close()
p.join()
print('test with pathos multiprocessing: %s seconds' %(time.time() - start_time))
start_time = time.time()
p = Pool2(nCores)
p.map(square, dataset)
# Close
p.close()
p.join()
print('test with pathos pools: %s seconds' %(time.time() - start_time))
start_time = time.time()
p = Pool3()
p.ncpus = nCores
p.map(square, dataset)
# Close
p.close()
p.join()
print('test with pathos parallel: %s seconds' %(time.time() - start_time))
我得到大约
- 0.001s 使用纯串行代码,没有并行,
- 0.100s 使用multiprocessing
选项,
- 0.100s 使用pathos.multiprocessing
,
- 4.470s 使用pathos.pools
,
-AssertionError
错误pathos.parallel
我从http://trac.mystic.cacr.caltech.edu/project/pathos/browser/pathos/examples.html复制了如何使用这些不同的选项
我知道对于这样一个简单的示例,并行处理比普通的串行代码要长。我不明白的是悲情的相对表现。
我检查了讨论,但不明白为什么pathos.pools
会这么长,以及为什么会出错(不确定最后一个选项的性能如何)。
我还尝试了一个简单的平方函数,甚至pathos.multiprocessing
比multiprocessing
有人可以解释这些不同选项之间的区别吗?
此外,我在远程计算机上运行该选项,运行centOS pathos.multiprocessing
,性能比multiprocessing
.
根据租用计算机的公司的说法,它应该像家用计算机一样工作。我知道,如果没有更多关于机器的详细信息,可能很难提供信息,但如果您对它的来源有任何想法,那将有所帮助。