【发布时间】:2018-08-06 00:55:17
【问题描述】:
我正在尝试在 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.100 秒,multiprocessing 选项,
- 0.100 秒 pathos.multiprocessing,
- 4.470 秒 pathos.pools,
- AssertionError 错误与 pathos.parallel
我从http://trac.mystic.cacr.caltech.edu/project/pathos/browser/pathos/examples.html复制了如何使用这些不同的选项
对于这样一个简单的示例,我知道并行处理比普通的串行代码要长。我不明白的是pathos的相对表现。
我查看了讨论,但不明白为什么 pathos.pools 会这么长,以及为什么会出现错误(不确定最后一个选项的性能如何)。
我还尝试了一个简单的平方函数,为此即使pathos.multiprocessing 也比multiprocessing 长得多
有人能解释一下这些不同选项之间的区别吗?
另外,我在远程计算机上运行pathos.multiprocessing 选项,运行centOS,性能比multiprocessing 差大约10 倍。
根据租用计算机的公司,它应该像家用计算机一样工作。我知道如果没有关于机器的更多详细信息,可能很难提供信息,但如果您对信息的来源有任何想法,那将有所帮助。
【问题讨论】:
-
原始 URL 似乎不可公开访问(404 Not Found / Code: NoSuchKey)。有关实现细节,可以查看源代码或询问 Mike McKearns(在 StackOverflow 上也很活跃)。
-
@user3666197 - 我们收到了关于您在编辑其他帖子时使用怪异格式的投诉(使用不恰当的粗体字、[SERIAL] 而非序列号等)。我在这里删除了该格式。请不要将自己的非标准风格强加在此处的其他帖子上。
-
@BradLarson 是的,您删除了您决定删除的任何内容。 你能帮忙消除歧义吗 - 你认为什么格式可以合理地在 (A) 纯文本与单词“parallel”(用于常见的,通常与专业无关的演讲)和 (B) 一个计算机科学术语 [PARALLEL],它确实具有唯一且非常特殊的含义,除了这个非常精确的 C/ 之外不允许任何其他含义来自系统理论的 S-context 用于一种独特的进程调度类型?我为此目的添加了交叉引用(如果你注意到的话)。
-
@user3666197 - 我认为在各种情况下并行和串行的含义很清楚。我认为没有必要单方面将格式应用于其他人不使用的帖子。所有这一切都会进一步分散人们对内容的注意力。在自己采取行动之前,也许您应该通过Meta 询问社区他们是否支持它。如果他们这样做,我很乐意让它留下来。然而,目前人们对你这样做很生气,并向版主投诉。
-
@BradLarson 如果您的观察确实在我目前所见的现实中得到满足,我将成为第一个快乐的人。许多文本实例包含“并行”一词,O/P 谈论“公正”-[CONCURRENT] 流程调度和如果两个人使用相同的词来解决主要误解,Meta 永远不会带来任何代数投票的补救。不同的东西。抱歉,这在过去十年没有奏效,所以教育落后于现实。你提到的人生气是认真的。然而,惩罚的想法从来都不是改善它的方法,正如现实所表明的那样
标签: python parallel-processing multiprocessing pathos parallelism-amdahl