Celery,RabbitMQ和statsmodels永远悬而未决的任务

时间:2013-06-24 17:11:27

标签: rabbitmq celery statsmodels

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

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

工作人员在消耗100%CPU时无限期待定。

发生了什么事?

1 个答案:

答案 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日 - 您可能需要升级您的版本或安装最新的开发版本。)

两个解决方法: