我正在尝试使用带有RabbitMQ的Celery来分发一些线性回归任务。该设置与示例add(x,y)函数一起正常工作,但是当我实例化statsmodels OLS类时,例如,
self.model = sm.OLS(self.y, self.X)
工作人员在消耗100%CPU时无限期待定。
发生了什么事?
答案 0 :(得分:1)
默认情况下,celery使用多处理库作为并发实现。 StatsModels的OLS方法调用Lapack,它(以及Lapack / BLAS中的许多函数)启动自己的线程池以加速计算。不幸的是,线程在子进程分叉后没有继承,所以创建了一个僵尸。
以下是Celery问题的讨论: https://github.com/celery/celery/issues/1842
但正如最后一篇文章指出的那样,这不是芹菜的错。
关于OpenBLAS问题的问题有很长时间的讨论: https://github.com/xianyi/OpenBLAS/issues/294
希望将来不会出现这个问题,因为OpenBLAS的默认版本现在是fork安全的: http://numpy-discussion.10968.n7.nabble.com/Default-builds-of-OpenBLAS-development-branch-are-now-fork-safe-td36523.html
(截至2014年2月9日 - 您可能需要升级您的版本或安装最新的开发版本。)