小编apr*_*ero的帖子

为什么这里的多处理速度较慢?

我试图用 Python 中的多处理来加速一些代码,但我无法理解一点。假设我有以下愚蠢的功能:

import time
from multiprocessing.pool import Pool

def foo(_):
    for _ in range(100000000):
        a = 3 
Run Code Online (Sandbox Code Playgroud)

当我在笔记本电脑(英特尔 - 8 核 cpu)上运行此代码而不使用多处理(请参阅下面的代码)时,所用时间约为 2.31 秒。

t1 = time.time()
foo(1)
print(f"Without multiprocessing {time.time() - t1}")
Run Code Online (Sandbox Code Playgroud)

相反,当我使用 Python 多处理库(请参阅下面的代码)运行此代码时,所用时间约为 6.0 秒。

pool = Pool(8)
t1 = time.time()
pool.map(foo, range(8))
print(f"Sample multiprocessing {time.time() - t1}")
Run Code Online (Sandbox Code Playgroud)

据我所知,我知道在使用多处理时有一些时间开销,主要是由于需要产生新进程和复制内存状态。然而,这个操作应该只在处理最初产生时执行一次,并且不应该那么大。

那么我在这里缺少什么?我的推理有问题吗?

编辑:我认为最好更明确地说明我的问题。我在这里期望的是多处理代码比顺序代码稍慢。确实,我没有将整个工作拆分到 8 个内核,但我并行使用 8 个内核来完成相同的工作(因此在理想的世界中,处理时间应该或多或少保持不变)。考虑到产生新进程的开销,我预计时间会增加一些(不是太大)百分比,但不会增加约 2.60 倍。

python multiprocessing

6
推荐指数
1
解决办法
500
查看次数

使用 Pulp 加速整数线性优化

我正在尝试解决一个具有超过 45.000 个二进制变量和约 350.000 个约束的大规模线性整数优化问题 (MILP)。

我正在使用Pulp来解决问题,但我无法在合理的时间内找到解决方案。

有什么方法可以大大加快优化过程吗?例如:

  • Pulp 可以以某种方式并行化吗?
  • 还有其他可以使用的软件包/求解器吗?
  • 还有其他建议吗?

python optimization linear-programming pulp

5
推荐指数
1
解决办法
1385
查看次数