Scikit-learn Multicore:"AttributeError:StdIn实例没有属性'close'"

 lyw 发布于 2023-01-09 17:21

我正在使用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=1I,则不会出现错误,但它无法利用多线程.

我假设这与PyCharm控制台重定向stdin的事实有关,但我不知道如何让它工作.任何想法都表示赞赏 - 谢谢!

1 个回答
  • 派对迟到了一点,但我刚才遇到了同样的问题.

    另一个答案中建议的解决方法是避免使用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(); 不过,我没有尝试使用流程池.

    2023-01-09 17:22 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有