首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Errno 32使用multiprocessing.Queue时出现管道断开错误

Errno 32使用multiprocessing.Queue时出现管道断开错误
EN

Stack Overflow用户
提问于 2018-07-29 17:18:13
回答 1查看 2.5K关注 0票数 2

我正在尝试抓取一些网页,考虑到每个网页大约需要2秒,而我有20k个这样的网页,我决定使用multiprocessing库来创建几个进程来同时抓取这些网页。

我的设置是一个包含以前解析过的数据的pandas数据帧和一个“新数据”字典。由于我不知道是需要抓取网页还是已经抓取了网页,因此我创建了一个带有multiprocessing.Manager.dict().的multiprocessing.Queue实例我有一个名为queueFill的函数,用于验证数据是否在数据帧中,如果不在,则将有问题的链接放入multiprocessing.Queue实例中。还有一个函数getData可以从multiprocessing.Queue中获取条目,该函数从队列中获取一个链接,下载并解析它,然后将其添加到"new data“字典中。

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

代码语言:javascript
运行
复制
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断开的管道

代码语言:javascript
运行
复制
p1.start()

我不明白为什么会发生这种事。即使将queueFill函数修改为立即返回,错误仍然会发生。有人能帮助我理解为什么会发生这个错误,以及我应该如何修复它吗?

EN

回答 1

Stack Overflow用户

发布于 2018-07-30 05:21:53

回答我自己的问题,这样未来的人们才能保持理智:

事实证明,多进程并不是真正喜欢在IPython/Jupyter笔记本上运行。在使用__name__检查将代码移动到单独的独立脚本时,输出与预期一致。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51578894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档