芹菜'工人-n' pid:xxxx退出' exitcode 1'当我导入hmmlearn

时间:2017-06-14 16:44:44

标签: rabbitmq celery anaconda conda hmmlearn

在我的tasks.py文件中,当我导入hmmlearn时,

from hmmlearn import hmm

并开始我的芹菜工人,我收到以下错误

[2017-06-14 09:18:27,638: INFO/MainProcess] Received task: 
sm.tasks.mytask[4e46806e-6f0f-420f-baac-c727c2a382d4]
[2017-06-14 09:18:27,716: ERROR/MainProcess] Process 'Worker-4' pid:5264 
exited with 'exitcode 1'
[2017-06-14 09:18:29,857: ERROR/MainProcess] Process 'Worker-7' pid:3172 
exited with 'exitcode 1'
[2017-06-14 09:18:29,857: ERROR/MainProcess] Process 'Worker-6' pid:5768 
exited with 'exitcode 1'
[2017-06-14 09:18:29,857: ERROR/MainProcess] Process 'Worker-5' pid:5236 
exited with 'exitcode 1'
[2017-06-14 09:18:31,450: ERROR/MainProcess] Process 'Worker-8' pid:5876 
exited with 'exitcode 1'

关闭工人后,

[2017-06-14 09:19:28,545: WARNING/MainProcess] c:\anaconda3\lib\site-
packages\celery\apps\worker.py:161: CDeprecationWarning:
Starting from version 3.2 Celery will refuse to accept pickle by default.

如果我只是使用该导入注释掉导入和代码,一切正常。但是,我能够在ipython上执行所有任务(包括hmm代码)作为独立的python代码而没有任何问题。

我使用带有以下详细信息的conda分发

Current conda install:

           platform : win-64
      conda version : 4.3.21
   conda is private : False
  conda-env version : 4.3.21
conda-build version : 1.21.3
     python version : 3.5.2.final.0
   requests version : 2.14.2

λ conda list | grep celery
celery                    3.1.18                    <pip>

λ conda list | grep kombu
kombu                     3.0.37                    <pip>

λ conda list | grep hmmlearn
hmmlearn                  0.1.1               np111py35_0    omnia

我该怎么办?

2 个答案:

答案 0 :(得分:2)

这可能是因为芹菜3.1.xx与台球3.3捆绑在一起。

如果您升级该软件包(在撰写本文时为3.5),该服务可能会再次运行。

pip install --upgrade billiard

答案 1 :(得分:0)

我偶然发现了类似的情况。如同一个答案所示,将billiard升级到3.5不是一个选项(因为它与Celery==3.1.25冲突,我更喜欢Windows的特定版本支持)。

然而,我发现,在我的情况下,问题很可能是由于this issue - 只有在我尝试从工作人员的sklearn进程中导入时才会发生。

通过从import sklearn之前添加此代码段来解决问题:

from multiprocessing import current_process
try:
    current_process()._config
except AttributeError:
    current_process()._config = {'semprefix': '/mp'}