gpt4 book ai didi

Python 简单循环并行化 Jupyter Notebook

转载 作者:行者123 更新时间:2023-12-04 00:56:37 27 4
gpt4 key购买 nike

我正在尝试使用 Jupyter Notebook 并行化一个简单的 python 循环。我尝试使用 Pool但它永远挂起,我必须杀死笔记本才能阻止它。

def process_frame(f):
new_dict = dict()
pc_dict = calculate_area(fl)
for key in pc_dict:
if key not in new_dict:
new_dict[key] = 0
new_dict[key] = float(sum(pc_dict[key]))
full_pc_dict[fl] = new_dict
frames_list = [0, 1, 2, 3, 4, 5, 6]
我要 process_frame对于 frames_list 中的每一帧.

请注意,最终结果应该是一个包含来自 process_frame 的所有输出的字典。 .我不知道将它附加在函数的末尾是否是个好主意。

关于如何使用 Jupyter Notebook 执行此操作的任何建议?另外,是否可以有 tqdm使用这种并行处理?

亲切的问候

最佳答案

[更新]
如果你想在 jupyter 笔记本中使用多处理,你想使用 multiprocess package而不是内置 multiprocessing (jupyter notebooks vs multiprocessing 的主要功能存在一个已知问题)

创建一个单独的 .py文件与您的魔术功能。如果您想在笔记本中执行此操作 - 在单独的代码单元中使用类似的内容:

%%writefile magic_functions.py

def magic_function(f):
return f+10

def process_frame(f):
# changed your logic here as I couldn't repro it
return f, magic_function(f)

OUT:编写magic_functions.py

然后并行运行您的代码:

from tqdm import tqdm

from multiprocess import Pool
from magic_functions import process_frame

frames_list = [0, 1, 2, 3, 4, 5, 6]

max_pool = 5

with Pool(max_pool) as p:
pool_outputs = list(
tqdm(
p.imap(process_frame,
frames_list),
total=len(frames_list)
)
)

print(pool_outputs)
new_dict = dict(pool_outputs)

print("dict:", new_dict)

出去:
100%|████████████████████████████████████████████████████████████████████████████████████| 7/7 [00:00<00:00, 37.63it/s]

[(0, 10), (1, 11), (2, 12), (3, 13), (4, 14), (5, 15), (6, 16)]
dict: {0: 10, 1: 11, 2: 12, 3: 13, 4: 14, 5: 15, 6: 16}


关于Python 简单循环并行化 Jupyter Notebook,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62041414/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com