问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

解决jupyter使用多线程multiprocessing可运行不报错的问题

发布网友 发布时间:2024-10-01 13:22

我来回答

1个回答

热心网友 时间:2024-11-29 02:59

某个项目,需要使用多进程以加快速度,之前一直没用过多进程,Pycharm可以跑,但需要在jupyter上运行,出现的问题是:程序一直在运行中,但是没有输出结果

①jupyternotebook/lab中直接使用多进程的话,虽然在界面上不会报错,但一直会处于运行状态,去查看命令行的话会看到报错:AttributeError:Can’tgetattribute‘XXX’on<mole‘main’>,由于某些原因Pool不能始终使用未在导入的模块中定义的对象。

根据上一篇博客中得到的一些知识点,实际上这个地方:在linux中使用的是fork的方式,可以复制公共变量和方法到新开启的进程中,但是windows中是重建一个新的进程(全新),在进程中并不存在公共的变量和方法,所以会出现这个问题,未能导入模块中定义的对象

②运行时报错:AttributeError:mole‘main’hasnoattribute‘spec’,这时需要在if__name__==__main__:下面加上:spec=“MoleSpec(name=‘builtins’,loader=<class‘_frozen_importlib.BuiltinImporter’>)”

jupyter只能跟踪主进程,没法跟踪子进程,网上有一些其他的解决办法,但个人觉得最简单的还是将代码打包成py文件,再让jupyter执行这个文件

我基本上是在使用多处理模块,但我仍在学习多处理功能.我正在使用达斯蒂·菲利普斯(DustyPhillips)编写的书,而这则代码属于该书.

importmultiprocessingimportrandomfrommultiprocessing.poolimportPooldefprime_factor(value):factors=[]fordivisorinrange(2,value-1):quotient,remainder=divmod(value,divisor)ifnotremainder:factors.extend(prime_factor(divisor))factors.extend(prime_factor(quotient))breakelse:factors=[value]returnfactorsif__name__=='__main__':pool=Pool()to_factor=[random.randint(100000,50000000)foriinrange(20)]results=pool.map(prime_factor,to_factor)forvalue,factorsinzip(to_factor,results):print("Thefactorsof{}are{}".format(value,factors))

在WindowsPowerShell上(不在jupyter笔记本上),我看到以下内容

ProcessSpawnPoolWorker-5:ProcessSpawnPoolWorker-1:AttributeError:Can'tgetattribute'prime_factor'on<mole'__main__'(built-in)>

我不知道为什么该单元永远不会停止运行?

解决方案

在Jupyter笔记本电脑中,问题似乎与设计理念不同.因此,我们必须将函数(prime_factor)写入另一个文件,然后导入该模块.此外,我们必须注意调整.例如,就我而言,我已将该函数编码到一个名为defs.py

的文件中.

defprime_factor(value):factors=[]fordivisorinrange(2,value-1):quotient,remainder=divmod(value,divisor)ifnotremainder:factors.extend(prime_factor(divisor))factors.extend(prime_factor(quotient))breakelse:factors=[value]returnfactors

然后在jupyter笔记本中我写了以下几行

importmultiprocessingimportrandomfrommultiprocessingimportPoolimportdefsif__name__=='__main__':pool=Pool()to_factor=[random.randint(100000,50000000)foriinrange(20)]results=pool.map(defs.prime_factor,to_factor)forvalue,factorsinzip(to_factor,results):print("Thefactorsof{}are{}".format(value,factors))

这解决了我的问题

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
不想要淘宝原来的帐号,怎么办,可以注销吗~谢谢了,大神帮忙啊 蓝宝石HD6770显卡求鉴定,GPUZ检测数据如下: 健身60公斤,176身高的人,比较瘦,是不是即便经常锻炼,力气也不一定比胳膊... 农村土地什么情况不予发证?如何解决? 共工治水在前还是怒触不周山在前? 共工触山的故事 有什么类似漂流瓶的软件推荐 漂流瓶软件推荐 保险柜密码怎么改 保险柜密码正确但是打不开怎么办 西安水多少钱一顿 西安哪里可以买自来水 黑苦荞茶和黄苦荞茶哪个好 黑苦荞茶和黄苦荞茶的区别 黑苦荞和黄苦荞茶哪种好 黄苦荞茶和黑苦荞茶哪一个更好,黄苦荞茶和黑苦荞茶有什么不一样 黑苦荞茶和黄苦荞茶哪个好,黄苦荞好还是黑苦荞好? 深圳核酸检测能退钱吗 留存表是什么意思? 案件留存是什么意思? 留底什么意思 留存的痕迹是什么意思? 留存什么意思 ...动漫名 ヤバい! ―复讐・暗サイト― 1-2都要中文字幕! 传奇私服合击外挂哪个最好用 求ヤバい!―复讐・暗サイト的游戏和动画下载,求大神 求《ヤバい!―复讐・暗サイト―》动漫 ヤバい,―复讐99暗サイト―怎么样 ヤバい!―复讐・暗サイト―为什么下载到99%就出现错误的音效 求各位... 能不能用触摸屏模拟模拟量 英国留学:埃克斯特大学研究生申请材料和申请难度介绍 长隆水上乐园1.5以下能玩的项目有什么? 白果汁中的水果是什么 想自己做点葡萄酒,不知道怎么弄,发酵多少天才好呢? 针对性读书的好处 详解针对性读书的几大好处 百变大侦探美丽新世界答案攻略 美丽新世界剧本流程详解-新手攻略... 江西广丰移动铁通宽带网络有什么优惠 对女朋友好的男没出息,而且女朋友看不起对吧? 两副对联.上联分别为"学雷锋助人为乐 "春风春意 股份与股权的区别是什么? 女人对男人看不起 说他们没出息 没什么作为 男人会怎么样 通风方式有哪几种? 一对情侣,男朋友没钱,没什么出息,女孩子为了他,工作的钱都一起花了... 我是做平面设计的,目前想买一台笔记本电脑,价位在4K到6K的。看了两 风机分为几种类型 高压锅蒸鸡蛋要多久能熟 高压锅蒸鸡蛋熟的时间是多久? ...1,1).m2(4,2)的圆的方程,并求这个圆的半径和圆心的坐标 为什么用不良导热体做保温杯 婴儿用保温杯什么材质好? 二建考过后多久可以领证? 二建证书领取流程是什么啊? 车背着12分我还能开吗 武汉长江大学与秦皇岛河北科技师范学院哪个好,,,