【发布时间】:2015-12-28 21:42:49
【问题描述】:
在为随机森林回归器设置n_jobs 参数> 1 时出现以下错误。如果我设置n_jobs=1,一切正常。
AttributeError: 'Thread' object has no attribute '_children'
我正在烧瓶服务中运行此代码。有趣的是,在烧瓶服务之外运行时不会发生这种情况。我只在一个新安装的 Ubuntu 机器上复制了这个。在我的 Mac 上它工作得很好。
这是一个讨论过这个问题的线程,但似乎没有解决任何问题: 'Thread' object has no attribute '_children' - django + scikit-learn
对此有什么想法吗?
这是我的测试代码:
@test.route('/testfun') def testfun(): 从 sklearn.ensemble 导入 RandomForestRegressor 将 numpy 导入为 np train_data = np.array([[1,2,3], [2,1,3]]) target_data = np.array([1,1]) 模型 = RandomForestRegressor(n_jobs=2) model.fit(train_data, target_data) 返回“是”堆栈跟踪:
回溯(最近一次通话最后): __call__ 中的文件“/usr/local/lib/python2.7/dist-packages/flask/app.py”,第 1836 行 return self.wsgi_app(environ, start_response) wsgi_app 中的文件“/usr/local/lib/python2.7/dist-packages/flask/app.py”,第 1820 行 响应 = self.make_response(self.handle_exception(e)) 文件“/usr/local/lib/python2.7/dist-packages/flask/app.py”,第 1403 行,在 handle_exception 中 reraise(exc_type, exc_value, tb) wsgi_app 中的文件“/usr/local/lib/python2.7/dist-packages/flask/app.py”,第 1817 行 响应 = self.full_dispatch_request() 文件“/usr/local/lib/python2.7/dist-packages/flask/app.py”,第 1477 行,在 full_dispatch_request rv = self.handle_user_exception(e) 文件“/usr/local/lib/python2.7/dist-packages/flask/app.py”,第 1381 行,在 handle_user_exception reraise(exc_type, exc_value, tb) 文件“/usr/local/lib/python2.7/dist-packages/flask/app.py”,第 1475 行,在 full_dispatch_request rv = self.dispatch_request() 文件“/usr/local/lib/python2.7/dist-packages/flask/app.py”,第 1461 行,在 dispatch_request 中 return self.view_functions[rule.endpoint](**req.view_args) 文件“/home/vagrant/flask.global-relevance-engine/global_relevance_engine/routes/test.py”,第 47 行,在 testfun model.fit(train_data, target_data) 文件“/usr/local/lib/python2.7/dist-packages/sklearn/ensemble/forest.py”,第 273 行,适合 for i, t in enumerate(trees)) __call__ 中的文件“/usr/local/lib/python2.7/dist-packages/sklearn/externals/joblib/parallel.py”,第 574 行 self._pool = ThreadPool(n_jobs) __init__ 中的文件“/usr/lib/python2.7/multiprocessing/pool.py”,第 685 行 Pool.__init__(self, processes, initializer, initargs) __init__ 中的文件“/usr/lib/python2.7/multiprocessing/pool.py”,第 136 行 self._repopulate_pool() _repopulate_pool 中的文件“/usr/lib/python2.7/multiprocessing/pool.py”,第 199 行 w.start() 文件“/usr/lib/python2.7/multiprocessing/dummy/__init__.py”,第 73 行,开始 self._parent._children[self] = 无【问题讨论】:
-
我没有解决方案,但我只会写我注意到的东西。看起来真的很奇怪——错误之前的那一行专门测试了
_children:if hasattr(self._parent, '_children'): self._parent._children[self] = None。当您说它在烧瓶之外工作时,是否具有完全相同的环境(解释器、库、操作系统、机器等)?我问是因为在我的系统中,第 73 行是条件,但在您的系统中,它是分配。我认为您的烧瓶环境使用的是旧版本的 python,其中 this bug 不固定。
标签: python flask scikit-learn