gpt4 book ai didi

python 多处理在几次迭代后挂起

转载 作者:行者123 更新时间:2023-12-05 06:35:52 24 4
gpt4 key购买 nike

我在一个数据 block 上的 for 循环中运行一个 multiprocessing 池。它在两次迭代中运行良好,并在第三次迭代时挂起。如果我减小每个卡盘的大小,它可能会在第四次或第五次迭代后挂起。在我发现问题的程序中,我运行了一个更广泛的函数,但这可以重现错误。

是否有适当的方法在完成后终止池?这样我就可以重新开始了。

import pandas as pd
import numpy as np
from multiprocess import Pool

df = pd.read_csv('paths.csv')

def do_something(user):
v = df[df['userId'] == user]
return v

if __name__ == '__main__':
users = df['userId'].unique()
n_chunks = round(len(users)/40)
subsets = [users[i:i+n_chunks] for i in range(0, len(users), n_chunks)]
chunk_counter = 0
for user_subset in subsets:
chunk_counter += 1
print(f'Beginning to process chunk {chunk_counter}...')
with Pool() as pool:
frames = pool.map(do_something, user_subset)
pool.close()
pool.terminate()

print(f'Completed processing chunk {chunk_counter}.')

最佳答案

我能够使用以下代码防止挂起:

with Pool(maxtasksperchild=1) as pool:
frames = pool.map_async(do_something, user_subset).get()
pool.terminate()
pool.join()

我不明白为什么使用 map_async 可以防止挂起。如果我有机会,我会深入研究,如果我明白原因,我会更新。

关于python 多处理在几次迭代后挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49458203/

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