1

我正在尝试使用带有 RabbitMQ 的 Celery 分配一些线性回归任务。该设置适用于示例 add(x,y) 函数,但是当我实例化 statsmodels OLS 类时,例如

self.model = sm.OLS(self.y, self.X) 

工作人员在消耗 100% CPU 的同时无限期挂起。

到底是怎么回事?

4

1 回答 1

1

默认情况下,celery 使用多处理库作为并发实现。StatsModels 的 OLS 方法调用 Lapack,Lapack(连同 Lapack / BLAS 中的许多函数)启动自己的线程池以加快计算速度。不幸的是,子进程被分叉后线程不会继承,因此会创建一个僵尸。

这是芹菜问题的讨论: https ://github.com/celery/celery/issues/1842

但正如上一篇文章指出的那样,这不是 Celery 的错。

关于 OpenBLAS 的问题有一个很长的讨论: https ://github.com/xianyi/OpenBLAS/issues/294

希望这在未来不会成为问题,因为 OpenBLAS 的默认构建现在是 fork-safe: http ://numpy-discussion.10968.n7.nabble.com/Default-builds-of-OpenBLAS-development-branch -are-now-fork-safe-td36523.html

(截至 2014 年 2 月 9 日 - 您可能需要升级您的版本或安装最新的开发版本)。

两种解决方法:

于 2014-03-18T20:30:19.193 回答