gpt4 book ai didi

具有大对象的 Python 多处理管道将挂起

转载 作者:行者123 更新时间:2023-12-05 01:42:43 26 4
gpt4 key购买 nike

我在下面有一个简单的代码片段来演示这个问题。

from multiprocessing import Pipe
import time

recv_end, send_end = Pipe(duplex=False)
d = {'word'+str(elem): elem for elem in range(3000)}

start_time = time.time()
send_end.send(d)
print('--- %s seconds ---' % (time.time()-start_time))

上面的代码工作正常并且速度足够快,可以满足我的目的,没问题。但如果我将大小设置为 5000,它就会无限期地挂起:

from multiprocessing import Pipe
import time

recv_end, send_end = Pipe(duplex=False)
d = {'word'+str(elem): elem for elem in range(5000)} # changed to 5000

start_time = time.time()
send_end.send(d)
print('--- %s seconds ---' % (time.time()-start_time))

Pipe 是否有大小限制,或者这是一个不可重现的问题?如果你把尺寸做得更大怎么样?如果有大小限制,避免这个问题并通过 Pipe 发送大字典的最佳方法是什么?提前致谢!

最佳答案

出现此问题是因为 Pipe.send() 是一个阻塞调用,它等待接收。阅读更多 here .要使其正常工作,您可以像以下代码一样创建流程:

#!/usr/bin/env python
from multiprocessing import Pipe, Process
import time
import sys


def foo(conn):
d = {'word'+str(elem): elem for elem in range(5000)} # changed to 5000
conn.send(d)
conn.close()


recv_end, send_end = Pipe(duplex=False)
p = Process(target=foo, args=(send_end, ))
p.start()

start_time = time.time()
recv_end.recv() # Try to comment and you will see that it waits for being received
p.join()
print('--- %s seconds ---' % (time.time()-start_time))

关于具有大对象的 Python 多处理管道将挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51125054/

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