Python 多处理:不在 Jupyter 或 IPython 上加载的示例

问题描述 投票:0回答:1

我正在关注 Berkeley 的 Python Numerical Methods 一书,我正在尝试为多处理器运行一些 code。设置很简单(显示串行和并行版本之间的时间差异),但我无法运行并行版本。我看到一个答案说在 Jupyter 笔记本中运行多线程可能需要一个不同的库。我在这本书中发现了一些错误,所以我不会对这可能需要一些更新感到惊讶。我在 IPython 环境和 Jupyter Lab 中都试过了,但我都没有加载(AttributeError: Can't get attribute 'random_square' on main' (built-in)>).

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')

python time python-multiprocessing python-multithreading
1个回答
0
投票

我找到了答案。您可以参考之前的question 来查看各种解决方案。我使用的是安装一个新包 multiprocess 并且我使用了 map_async 而不是 map 函数,它的工作就像一个魅力!

© www.soinside.com 2019 - 2024. All rights reserved.