【问题标题】:Can't run Celery with Jython 2.7.0 - no module named multiprocessing无法使用 Jython 2.7.0 运行 Celery - 没有名为 multiprocessing 的模块
【发布时间】:2015-09-23 07:57:28
【问题描述】:

celery 文档指出我应该能够使用 Jython 运行它。不幸的是,我无法让它工作。这是我尝试运行它时遇到的错误:


Traceback (most recent call last):
  File "/home/linoor/jython2.7.0/bin/celery", line 11, in 
    sys.exit(main())
  File "/home/linoor/jython2.7.0/Lib/site-packages/celery/__main__.py", line 29, in main
    from celery.bin.celery import main
  File "/home/linoor/jython2.7.0/Lib/site-packages/celery/bin/__init__.py", line 3, in 
    from .base import Option
  File "/home/linoor/jython2.7.0/Lib/site-packages/celery/bin/base.py", line 86, in 
    from celery import VERSION_BANNER, Celery, maybe_patch_concurrency
  File "/home/linoor/jython2.7.0/Lib/site-packages/celery/five.py", line 307, in __getattr__
    module = __import__(self._object_origins[name], None, None, [name])
  File "/home/linoor/jython2.7.0/Lib/site-packages/celery/app/__init__.py", line 14, in 
    from celery import _state
  File "/home/linoor/jython2.7.0/Lib/site-packages/celery/_state.py", line 20, in 
    from celery.utils.threads import LocalStack
  File "/home/linoor/jython2.7.0/Lib/site-packages/celery/utils/__init__.py", line 27, in 
    from celery.exceptions import CPendingDeprecationWarning, CDeprecationWarning
  File "/home/linoor/jython2.7.0/Lib/site-packages/celery/exceptions.py", line 15, in 
    from billiard.exceptions import (  # noqa
  File "/home/linoor/jython2.7.0/Lib/site-packages/billiard/__init__.py", line 60, in 
    from .process import Process, current_process, active_children
  File "/home/linoor/jython2.7.0/Lib/site-packages/billiard/process.py", line 25, in 
    from multiprocessing import process as _mproc
ImportError: No module named multiprocessing

所以我尝试安装多处理,但后来发生了这种情况:


Downloading/unpacking multiprocessing
  Downloading multiprocessing-2.6.2.1.tar.gz (108kB): 108kB downloaded
  Running setup.py (path:/tmp/pip_build_linoor/multiprocessing/setup.py) egg_info for package multiprocessing

Installing collected packages: multiprocessing
  Running setup.py install for multiprocessing
    building 'multiprocessing._multiprocessing' extension
    error: Compiling extensions is not supported on Jython
    Complete output from command /home/linoor/jython2.7.0/bin/jython -c "import setuptools, tokenize;__file__='/tmp/pip_build_linoor/multiprocessing/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-EnQW3c-record/install-record.txt --single-version-externally-managed --compile:
    running install

running build

running build_py

creating build

creating build/lib.java1.7.0_79-2.7

creating build/lib.java1.7.0_79-2.7/multiprocessing

copying Lib/multiprocessing/queues.py -> build/lib.java1.7.0_79-2.7/multiprocessing

copying Lib/multiprocessing/tests.py -> build/lib.java1.7.0_79-2.7/multiprocessing

copying Lib/multiprocessing/sharedctypes.py -> build/lib.java1.7.0_79-2.7/multiprocessing

copying Lib/multiprocessing/synchronize.py -> build/lib.java1.7.0_79-2.7/multiprocessing

copying Lib/multiprocessing/heap.py -> build/lib.java1.7.0_79-2.7/multiprocessing

copying Lib/multiprocessing/pool.py -> build/lib.java1.7.0_79-2.7/multiprocessing

copying Lib/multiprocessing/connection.py -> build/lib.java1.7.0_79-2.7/multiprocessing

copying Lib/multiprocessing/__init__.py -> build/lib.java1.7.0_79-2.7/multiprocessing

copying Lib/multiprocessing/util.py -> build/lib.java1.7.0_79-2.7/multiprocessing

copying Lib/multiprocessing/process.py -> build/lib.java1.7.0_79-2.7/multiprocessing

copying Lib/multiprocessing/reduction.py -> build/lib.java1.7.0_79-2.7/multiprocessing

copying Lib/multiprocessing/managers.py -> build/lib.java1.7.0_79-2.7/multiprocessing

copying Lib/multiprocessing/forking.py -> build/lib.java1.7.0_79-2.7/multiprocessing

copying Lib/multiprocessing/patch.py -> build/lib.java1.7.0_79-2.7/multiprocessing

creating build/lib.java1.7.0_79-2.7/multiprocessing/dummy

copying Lib/multiprocessing/dummy/connection.py -> build/lib.java1.7.0_79-2.7/multiprocessing/dummy

copying Lib/multiprocessing/dummy/__init__.py -> build/lib.java1.7.0_79-2.7/multiprocessing/dummy

creating build/lib.java1.7.0_79-2.7/multiprocessing/examples

copying Doc/includes/mp_benchmarks.py -> build/lib.java1.7.0_79-2.7/multiprocessing/examples

copying Doc/includes/mp_synchronize.py -> build/lib.java1.7.0_79-2.7/multiprocessing/examples

copying Doc/includes/mp_workers.py -> build/lib.java1.7.0_79-2.7/multiprocessing/examples

copying Doc/includes/__init__.py -> build/lib.java1.7.0_79-2.7/multiprocessing/examples

copying Doc/includes/mp_newtype.py -> build/lib.java1.7.0_79-2.7/multiprocessing/examples

copying Doc/includes/mp_distributing.py -> build/lib.java1.7.0_79-2.7/multiprocessing/examples

copying Doc/includes/mp_webserver.py -> build/lib.java1.7.0_79-2.7/multiprocessing/examples

copying Doc/includes/mp_pool.py -> build/lib.java1.7.0_79-2.7/multiprocessing/examples

running build_ext

building 'multiprocessing._multiprocessing' extension

error: Compiling extensions is not supported on Jython

根据我的阅读,无法在 Jython 中使用包 multiprocessing,因为它需要 C 扩展 (link to SO question)。

那么到底有没有可能用 Jython 运行 celery?

谢谢!

【问题讨论】:

  • 据我所知,Jython 几乎是一个死项目。如果你更喜欢在 Java 平台上运行 Python 程序,你应该试试GraalVM

标签: celery jython django-celery jython-2.7


【解决方案1】:

这里有一个讨论:https://github.com/celery/celery/issues/96 关于在 jython 上使用线程而不是多处理运行 celery

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-13
    • 1970-01-01
    • 1970-01-01
    • 2020-01-28
    • 2010-12-10
    • 2015-07-07
    • 2023-02-04
    相关资源
    最近更新 更多