我正在关注 Berkeley 的 Python Numerical Methods 一书,我正在尝试为多处理器运行一些 code。设置很简单(显示串行和并行版本之间的时间差异),但我无法运行并行版本。我看到一个答案说在 Jupyter 笔记本中运行多线程可能需要一个不同的库。我在这本书中发现了一些错误,所以我不会对这可能需要一些更新感到惊讶。我在 IPython 环境和 Jupyter Lab 中都试过了,但我都没有加载(AttributeError: Can't get attribute 'random_square' on
import multiprocessing as mp
print(f"Number of cpu: {mp.cpu_count()}")
# Serial version - works fine
import numpy as np
import time
def random_square(seed):
np.random.seed(seed)
random_num = np.random.randint(0, 10)
return random_num**2
t0 = time.time()
results = []
for i in range(10000000):
results.append(random_square(i))
t1 = time.time()
print(f'Execution time {t1 - t0} s')
# Parallel version - doesn't compute
import multiprocessing as mp
t0 = time.time()
n_cpu = mp.cpu_count()
pool = mp.Pool(processes=n_cpu)
results = [pool.map(random_square, range(10000000))]
t1 = time.time()
print(f'Execution time {t1 - t0} s')
我找到了答案。您可以参考之前的question 来查看各种解决方案。我使用的是安装一个新包 multiprocess 并且我使用了 map_async 而不是 map 函数,它的工作就像一个魅力!