在我的 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:anaconda3libsite-
packagesceleryappsworker.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
我该怎么办?
这可能是因为芹菜 3.1.xx 与台球 3.3 捆绑在一起。
如果升级该包(在撰写本文时升级到 3.5(,该服务可能会再次运行。
pip install --upgrade billiard
我偶然发现了类似的情况。正如不同的答案中所建议的那样,将billiard
升级到 3.5 不是一种选择(因为它与 Celery==3.1.25
冲突,我更喜欢 Windows 支持的特定版本(。
发现,就我而言,问题很可能是由于此问题引起的 - 仅当我尝试从工人流程中的sklearn
导入任何内容时才会发生。
通过在 sklearn
的 import
s 之前添加此代码段解决了该问题:
from multiprocessing import current_process
try:
current_process()._config
except AttributeError:
current_process()._config = {'semprefix': '/mp'}