gpt4 book ai didi

python - 使用 multiprocessing.Queue 时出现 Errno 32 Broken pipe 错误

转载 作者:太空宇宙 更新时间:2023-11-04 04:36:30 49 4
gpt4 key购买 nike

我正在尝试抓取一些网页,鉴于每个网页大约需要 2 秒,而我有 20k 个网页,我决定使用 multiprocessing 库创建多个进程来同时抓取网页。

我的设置是一个 pandas 数据框,其中包含以前解析的数据和一个“新数据”字典。因为我不知道我是否需要抓取网页或者它是否已经被抓取,所以我创建了一个 multiprocessing.Queue 实例,以及一个 multiprocessing.Manager.dict() .我有一个函数 queueFill,它验证数据是否在数据帧中,如果不在,则将有问题的链接放在 multiprocessing.Queue 实例中。还有一个函数可以从 multiprocessing.Queue 中获取项目,getData,它从队列中获取一个链接,下载并解析它并将其添加到“新数据”字典中。

我正在尝试创建一个执行 queueFill 函数和一个执行 getData 函数的进程:

manager = multiprocessing.Manager()
newPlayersDict = manager.dict()
errorsDict = manager.dict()
i=0
linklen = str(len(linklist))
q = multiprocessing.Queue()


if 'playersDF' in globals():
p1 = multiprocessing.Process(target=queueFill,args=(playersDF,q,linklist))
else:
p1 = multiprocessing.Process(target=queueFill,args=(None,q,linklist))

p2 = multiprocessing.Process(target=getData,args=(q,newPlayersDict,errorsDict,linklen,i))
time.sleep(0.5)
p1.start()
p2.start()

p1.join()
p2.join()

但是,运行它会给我一个 [Errno 32] Broken pipe 在线:

p1.start()

我不明白为什么会这样。即使将queueFill函数修改为立即返回,还是会报错。谁能帮助我理解为什么会发生此错误,以及我应该如何解决它?

最佳答案

回答我自己的问题,让 future 的人保持理智:

事实证明,多处理并不真正喜欢在 IPython/Jupyter 笔记本中运行。使用 __name__ 检查将代码移动到单独的独立脚本后,输出符合预期。

关于python - 使用 multiprocessing.Queue 时出现 Errno 32 Broken pipe 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51578894/

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