Python 多处理管道最大写入大小

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

我正在使用在 Ubuntu 上运行的 Python 多处理包实现一段代码。为了更有效地在进程之间进行通信,我正在收集要通过 multiprocessing.Pipe 发送到数组中的数据,并在大小超过 1000 个元素时发送整个数组。 我注意到我的代码中偶尔会出现死锁,似乎我在发送批处理数据的地方碰到了它。 尝试了一个简单的代码来了解通过 Pipe 发送的对象的大小是否可能导致死锁并且似乎是这种情况。 经过几轮实验后,64KiB 的腌制数据似乎是一个神奇的数字。任何更大的数字都会导致死锁,而 64KiB 或更低的数字将立即通过。 文档讨论了 32MiB+ 对象大小以引发异常。但我的实验显示 64KiB。你知道是这种情况还是我在这里做错了什么?

import multiprocessing as mp
import sys
import pickle

c, p = mp.Pipe(duplex=False)

batch_list = []

for i in range(21912):
    batch_list.append(i)
    
print(f"Size of payload is: {sys.getsizeof(batch_list)/1024} KiB")
pkl_batch_list = pickle.dumps(batch_list)
print(f"Size of pickled payload is: {sys.getsizeof(pkl_batch_list)/1024} KiB")
p.send(batch_list)


while c.poll():
    try:
        c.recv()
    except Exception:
        print("got exception")

print("Done!")
python multiprocessing pipe pickle
© www.soinside.com 2019 - 2024. All rights reserved.