芹菜错误:“没有名为模块billiard.forking” - 如何诊断?(Celery erro

2019-10-31 23:26发布

我不知道从哪里开始诊断和修复这样的:

$  bin/django celeryd -l DEBUG -v 3


 -------------- celery@lucid32 v3.0.3 (Chiastic Slide)
---- **** ----- 
--- * ***  * -- [Configuration]
-- * - **** --- . broker:      django://localhost//
- ** ---------- . app:         default:0x8b0aa4c (djcelery.loaders.DjangoLoader)
- ** ---------- . concurrency: 1 (processes)
- ** ---------- . events:      OFF (enable -E to monitor this worker)
- ** ---------- 
- *** --- * --- [Queues]
-- ******* ---- . celery:      exchange:celery(direct) binding:celery
--- ***** ----- 

[Tasks]
  . celery.backend_cleanup
  . celery.chain
  . celery.chord
  . celery.chord_unlock
  . celery.chunks
  . celery.group
  . celery.map
  . celery.starmap
  . tardis_portal.make_local_copy
  . tardis_portal.verify_as_remote
  . tardis_portal.verify_files

[2012-07-25 18:27:37,168: DEBUG/MainProcess] [Worker] Loading modules.
[2012-07-25 18:27:37,173: DEBUG/MainProcess] [Worker] Claiming components.
[2012-07-25 18:27:37,173: DEBUG/MainProcess] [Worker] Building boot step graph.
[2012-07-25 18:27:37,173: DEBUG/MainProcess] [Worker] New boot order: {ev, queues, pool, mediator, beat, autoreloader, timers, state-db, autoscaler, consumer}
[2012-07-25 18:27:37,174: DEBUG/MainProcess] Starting celery.concurrency.processes.TaskPool...
[2012-07-25 18:27:37,229: DEBUG/MainProcess] celery.concurrency.processes.TaskPool OK!
[2012-07-25 18:27:37,233: DEBUG/MainProcess] Starting celery.worker.mediator.Mediator...
[2012-07-25 18:27:37,235: DEBUG/MainProcess] celery.worker.mediator.Mediator OK!
[2012-07-25 18:27:37,236: DEBUG/MainProcess] Starting celery.worker.consumer.BlockingConsumer...
[2012-07-25 18:27:37,236: WARNING/MainProcess] celery@lucid32 has started.
[2012-07-25 18:27:37,237: DEBUG/MainProcess] Consumer: Re-establishing connection to the broker...
[2012-07-25 18:27:37,242: DEBUG/MainProcess] Consumer: Connection established.
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named billiard.forking
[2012-07-25 18:27:37,287: DEBUG/MainProcess] Consumer: basic.qos: prefetch_count->4
[2012-07-25 18:27:37,298: DEBUG/MainProcess] Consumer: Ready to accept tasks!
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named billiard.forking
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named billiard.forking
...

我不知道什么台球是,除了它的Django在使用过程中的一些组件multiforking。 由于有给我不知道是否我在看Django中或在我的应用程序的错误,以便一点背景知识。

适当forking.py存在于./eggs/billiard-2.7.3.10-py2.6-linux-i686.egg/ 。 运行bin/django shell ,然后import billiard.forking正确执行。

所以,想必一些子进程正在催生了错误的环境,并没有找到billiard.forking。

该应用程序是在这里 。

Answer 1:

在导入错误正在从子过程提出桌球是创建时叉。 当这些过程不会对他们的sys.path台球,可在两种情况下,我知道现在发生的导入错误引发。

第一,这是您的情况下,是因为Django是重整(和然后取消的mangling)的sys.path中,如在https://github.com/celery/billiard/issues/10 。 解决方法是在该线程描述明确固定的sys.path。

第二,这是发生在我身上,并引起了我找到这个问题的情况下,是因为你在virtualenv中,并没有被激活,由于某种原因,子进程。

芹菜(这是调用台球的东西)下运行“#!的/ usr / bin中/ env的python2.6的”,因此,如果您的virtualenv是在没有python2.6的二进制(也许只有“蟒蛇”)创建子进程将回落到使用系统的python2.6的,该不会已经安装了台球。 这其实有时发生(与发生在我身上) -我已经开了反对的virtualenv拉请求,尽可能消除其中的一些情况: https://github.com/pypa/virtualenv/pull/341



Answer 2:

好吧,但是我过了第一关。 天真的方法工作:grep的整个源代码树,包括鸡蛋,对于“billiard.forking”。 出人意料的是,它出现的地方是分岔模块本身内部:

if getattr(sys, 'frozen', False):
    return [sys.executable, '--billiard-fork']
else:
    prog = 'from billiard.forking import main; main()'
    return [_python_exe, '-c', prog, '--billiard-fork']

这肯定是原因。 在运行时,该代码返回此:

/usr/bin/python -c "from billiard.forking import main; main()" --billiard-fork

其中,可以预见:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named billiard.forking

我不知道为什么,或者是什么这个代码的意思做,但我过去“我不知道从哪里开始”的阶段。



文章来源: Celery error: “No module named billiard.forking” - how to diagnose?