当前位置: 首页 > 面试题库 >

Python多处理:为什么大的块大小会变慢?

孔华池
2023-03-14
问题内容

我一直在使用Python的多处理模块来分析一些代码(“ job”函数只是对数字进行平方)。

data = range(100000000)
n=4
time1 = time.time()
processes = multiprocessing.Pool(processes=n)
results_list = processes.map(func=job, iterable=data, chunksize=10000)
processes.close()
time2 = time.time()
print(time2-time1)
print(results_list[0:10])

我发现奇怪的一件事是,最佳块大小似乎约为1万个元素-在我的计算机上花费了16秒。如果我将块大小增加到100k或200k,则它将减慢到20秒。

这种差异可能是由于较长的清单的酸洗所需的时间更长吗?100个元素的块大小需要62秒,我认为这是由于在不同进程之间来回传递块所需的额外时间。


问题答案:

关于最佳块大小:

  1. 拥有大量的小块将允许4个不同的工人更有效地分配负载,因此希望有较小的块。
  2. 另一方面,每次必须处理新块时,与进程相关的上下文更改都会增加开销,因此需要较少量的上下文更改,因此需要较少的块。

由于这两个规则都需要不同的方法,因此中间的一点就是要走的路,类似于供求图。



 类似资料:
  • 问题内容: [编辑:此问题仅适用于32位系统。 如果您的计算机,操作系统和python实现是64位的,则映射大型文件将可靠且非常有效。] 我正在编写一个模块,该模块除其他功能外,还允许对文件进行按位读取访问。这些文件可能很大(数百GB),因此我编写了一个简单的类,使我可以像对待字符串一样对待文件,并隐藏所有查找和读取内容。 当时我写了包装类,我对mmap模块一无所知。在阅读mmap的文档时,我认为

  • 我有大约500MB的H2数据库。 H2的版本是1.2.147。 数据库的存储引擎是PageStore。 JDBC URL如下所示。 jdbc:h2:file://C:/h2/client;如果存在=真;MVCC=真;数据库\u事件\u侦听器。H2DBMonitor';AUTO_SERVER=TRUE;对数=2 我做了一个版本的H2 1.4.192没有改变数据库的存储引擎。 当我的客户使用数据库时,

  • 问题内容: 我不明白为什么 ‘chown’ 命令应该增加我的docker映像的大小? 以下Dockerfile创建大小为5.3MB的映像: 但是,此示例创建的图像大小为8.7MB: 为什么? 注意: 我的实际dockerfile当然比该示例长得多,因此映像大小的增加也很大。这就是为什么我什至在乎。 问题答案: Dockerfile中的每个步骤都会生成一个新的中间映像或“层”,该文件由文件系统中与上

  • 问题内容: 限制Java JVM上Permgen空间大小的目的是什么?为什么不总是将其设置为等于最大堆大小?Java为什么默认为这么少的64MB?他们是否正在试图通过这种方式迫使人们注意代码中的Permgen问题? 如果我的应用使用85MB的permgen,那么将其设置为96MB可能是安全的,但是如果它只是主堆的一部分,为什么还要设置得如此之小呢?允许JVM使用堆允许的PermGen效率不高吗?

  • 问题内容: 我正在学习Java 8文档。我知道最大数组大小定义为均值2 ^ 31 – 8 = 2147483639 。然后,我集中讨论了为什么要减去8 或减去? 有些人根据文档给出了一些逻辑。因此,对于标题字,减去8。但是在这种情况下,如果标题字需要大于8,那么答案是什么? 请在此基础上澄清我。预先感谢您的合作。 问题答案: 阅读上述有关Java内存管理的文章,其中清楚指出 我认为这适用于Arra

  • 如果你用移动设备在这个网页上点击它们,它们就会变小。我怎么能阻止它? 和我的CSS样式部分有关系吗?

  • 我为我的Java web应用程序分配了一个最大值。由于一些内存泄漏,应用程序已经消耗了将近2 GB的分配内存。此时,我已经使用进行了内存转储。在一个实例中,堆转储大小接近>1.5GB,而在另一个实例中,堆转储大小<100 MB。这背后的原因是什么?

  • 我正在处理包含数据库中多个记录列表的。 我应该如何指定处理每个子列表的块大小? 感谢您的帮助,提前谢谢。