我正在使用PyCharm从Scikit-learn运行RandomForestRegressor.这在执行整个脚本时工作正常:
clf = ensemble.RandomForestClassifier(n_estimators=100, n_jobs = 4, verbose=1, oob_score=True) clf = clf.fit(x_train, y_train)
当我尝试从控制台运行该行时,我反复出现此错误:
AttributeError: StdIn instance has no attribute 'close' File "/usr/local/Cellar/python/2.7.6_1/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/process.py", line 249, in _bootstrap sys.stdin.close()
如果我将n_jobs
参数更改为n_jobs=1
I,则不会出现错误,但它无法利用多线程.
我假设这与PyCharm控制台重定向stdin的事实有关,但我不知道如何让它工作.任何想法都表示赞赏 - 谢谢!
派对迟到了一点,但我刚才遇到了同样的问题.
另一个答案中建议的解决方法是避免使用PyCharm的交互式解释器.当然,这很有效但不满足我,因为我非常喜欢使用交互式解释器.
我发现了一种解决问题的不同解决方法,并允许使用交互式解释器.在每次创建新流程之前multiprocessing.Process()
,必须应用以下代码段:
if not hasattr(sys.stdin, 'close'): def dummy_close(): pass sys.stdin.close = dummy_close
现在,multiprocessing
可以调用close()
上sys.stdin
就好了,一切工程进展顺利.
请注意,close()
在启动阶段连接假人一次是不够的.我发现每次打电话都要这样做multiprocessing.Process()
; 不过,我没有尝试使用流程池.