【问题标题】:Python Celery worker_main "RuntimeError: maximum recursion depth exceeded"Python Celery worker_main“运行时错误:超出最大递归深度”
【发布时间】:2017-10-25 20:22:57
【问题描述】:

我正在开发一个基于 Celery 的应用程序,并希望从主函数中启动工作程序。这是代码的一个非常简化的版本:

from celery import Celery

class CoolApp(object):
    def __init__(self):
        self.app = Celery('test', 'amqp://guest@localhost/')

test = CoolApp()

test.app.worker_main()

这会产生RuntimeError: maximum recursion depth exceeded in cmp 错误,我不知道为什么。请帮忙。

追溯:

Traceback (most recent call last):
  File "test.py", line 9, in <module>
    test.app.worker_main()
  File "/usr/lib/python2.7/site-packages/celery/app/base.py", line 368, in worker_main
    ).execute_from_commandline(argv)
  File "/usr/lib/python2.7/site-packages/celery/bin/base.py", line 281, in execute_from_commandline
    return self.handle_argv(self.prog_name, argv[1:])
  File "/usr/lib/python2.7/site-packages/celery/bin/base.py", line 367, in handle_argv
    *self.parse_options(prog_name, argv, command))
  File "/usr/lib/python2.7/site-packages/celery/bin/base.py", line 403, in parse_options
    self.parser = self.create_parser(prog_name, command)
  File "/usr/lib/python2.7/site-packages/celery/bin/base.py", line 419, in create_parser
    self.add_arguments(parser)
  File "/usr/lib/python2.7/site-packages/celery/bin/worker.py", line 275, in add_arguments
    default=conf.worker_state_db,
  File "/usr/lib/python2.7/site-packages/celery/utils/collections.py", line 130, in __getattr__
    return self[k]
  File "/usr/lib/python2.7/site-packages/celery/utils/collections.py", line 431, in __getitem__
    return getitem(k)
  File "/usr/lib/python2.7/site-packages/celery/utils/collections.py", line 280, in __getitem__
    return mapping[_key]
  File "/usr/lib64/python2.7/UserDict.py", line 19, in __getitem__
    if key in self.data:
  File "/usr/lib/python2.7/site-packages/celery/utils/collections.py", line 130, in __getattr__
    return self[k]
  File "/usr/lib64/python2.7/UserDict.py", line 19, in __getitem__
    if key in self.data:
  File "/usr/lib/python2.7/site-packages/celery/utils/collections.py", line 130, in __getattr__
    return self[k]
  File "/usr/lib64/python2.7/UserDict.py", line 19, in __getitem__
    if key in self.data:
  File "/usr/lib/python2.7/site-packages/celery/utils/collections.py", line 130, in __getattr__
    return self[k]
  File "/usr/lib64/python2.7/UserDict.py", line 19, in __getitem__
    if key in self.data:
  File "/usr/lib/python2.7/site-packages/celery/utils/collections.py", line 130, in __getattr__
    return self[k]
  File "/usr/lib64/python2.7/UserDict.py", line 19, in __getitem__
    if key in self.data:
  File "/usr/lib/python2.7/site-packages/celery/utils/collections.py", line 130, in __getattr__
    return self[k]
  File "/usr/lib64/python2.7/UserDict.py", line 19, in __getitem__
    if key in self.data:
  File "/usr/lib/python2.7/site-packages/celery/utils/collections.py", line 130, in __getattr__
    return self[k]
  File "/usr/lib64/python2.7/UserDict.py", line 19, in __getitem__
    if key in self.data:
  File "/usr/lib/python2.7/site-packages/celery/utils/collections.py", line 130, in __getattr__
    return self[k]
  File "/usr/lib64/python2.7/UserDict.py", line 19, in __getitem__
    if key in self.data:
  File "/usr/lib/python2.7/site-packages/celery/utils/collections.py", line 130, in __getattr__
    return self[k]
  File "/usr/lib64/python2.7/UserDict.py", line 19, in __getitem__
    if key in self.data:
  File "/usr/lib/python2.7/site-packages/celery/utils/collections.py", line 130, in __getattr__
    return self[k]
  File "/usr/lib64/python2.7/UserDict.py", line 19, in __getitem__
    if key in self.data:
  File "/usr/lib/python2.7/site-packages/celery/utils/collections.py", line 130, in __getattr__
    return self[k]
  File "/usr/lib64/python2.7/UserDict.py", line 19, in __getitem__
    if key in self.data:
  File "/usr/lib/python2.7/site-packages/celery/utils/collections.py", line 130, in __getattr__
    return self[k]
  File "/usr/lib64/python2.7/UserDict.py", line 19, in __getitem__
    if key in self.data:
  File "/usr/lib/python2.7/site-packages/celery/utils/collections.py", line 130, in __getattr__
    return self[k]
  File "/usr/lib64/python2.7/UserDict.py", line 19, in __getitem__
    if key in self.data:
  File "/usr/lib/python2.7/site-packages/celery/utils/collections.py", line 130, in __getattr__
    return self[k]
  File "/usr/lib64/python2.7/UserDict.py", line 19, in __getitem__
    if key in self.data:
  File "/usr/lib/python2.7/site-packages/celery/utils/collections.py", line 130, in __getattr__
    return self[k]
  File "/usr/lib64/python2.7/UserDict.py", line 19, in __getitem__
    if key in self.data:
  File "/usr/lib/python2.7/site-packages/celery/utils/collections.py", line 130, in __getattr__
    return self[k]
  File "/usr/lib64/python2.7/UserDict.py", line 19, in __getitem__
    if key in self.data:
  File "/usr/lib/python2.7/site-packages/celery/utils/collections.py", line 130, in __getattr__
    return self[k]
  File "/usr/lib64/python2.7/UserDict.py", line 19, in __getitem__
    if key in self.data:
  File "/usr/lib/python2.7/site-packages/celery/utils/collections.py", line 130, in __getattr__
    return self[k]
  File "/usr/lib64/python2.7/UserDict.py", line 19, in __getitem__
    if key in self.data:
  File "/usr/lib/python2.7/site-packages/celery/utils/collections.py", line 130, in __getattr__
    return self[k]
  ...
  File "/usr/lib64/python2.7/UserDict.py", line 19, in __getitem__
    if key in self.data:
  File "/usr/lib/python2.7/site-packages/celery/utils/collections.py", line 130, in __getattr__
    return self[k]
  File "/usr/lib64/python2.7/UserDict.py", line 19, in __getitem__
    if key in self.data:
  File "/usr/lib/python2.7/site-packages/celery/utils/collections.py", line 130, in __getattr__
    return self[k]
  File "/usr/lib64/python2.7/UserDict.py", line 19, in __getitem__
    if key in self.data:
  File "/usr/lib/python2.7/site-packages/celery/utils/collections.py", line 130, in __getattr__
    return self[k]
  File "/usr/lib64/python2.7/UserDict.py", line 19, in __getitem__
    if key in self.data:
  File "/usr/lib/python2.7/site-packages/celery/utils/collections.py", line 130, in __getattr__
    return self[k]
  File "/usr/lib64/python2.7/UserDict.py", line 19, in __getitem__
    if key in self.data:
  File "/usr/lib/python2.7/site-packages/celery/utils/collections.py", line 130, in __getattr__
    return self[k]
  File "/usr/lib64/python2.7/UserDict.py", line 19, in __getitem__
    if key in self.data:
  File "/usr/lib/python2.7/site-packages/kombu/utils/objects.py", line 44, in __get__
    value = obj.__dict__[self.__name__] = self.__get(obj)
  File "/usr/lib/python2.7/site-packages/celery/app/base.py", line 148, in data
    return self.callback()
  File "/usr/lib/python2.7/site-packages/celery/app/base.py", line 910, in _finalize_pending_conf
    conf = self._conf = self._load_config()
  File "/usr/lib/python2.7/site-packages/celery/app/base.py", line 923, in _load_config
    self.prepare_config(self.loader.conf), self._preconf,
  File "/usr/lib/python2.7/site-packages/kombu/utils/objects.py", line 44, in __get__
    value = obj.__dict__[self.__name__] = self.__get(obj)
  File "/usr/lib/python2.7/site-packages/celery/app/base.py", line 1208, in loader
    return get_loader_cls(self.loader_cls)(app=self)
  File "/usr/lib/python2.7/site-packages/celery/loaders/__init__.py", line 21, in get_loader_cls
    return symbol_by_name(loader, LOADER_ALIASES, imp=import_from_cwd)
  File "/usr/lib/python2.7/site-packages/kombu/utils/imports.py", line 56, in symbol_by_name
    module = imp(module_name, package=package, **kwargs)
  File "/usr/lib/python2.7/site-packages/celery/utils/imports.py", line 100, in import_from_cwd
    with cwd_in_path():
  File "/usr/lib64/python2.7/contextlib.py", line 17, in __enter__
    return self.gen.next()
  File "/usr/lib/python2.7/site-packages/celery/utils/imports.py", line 60, in cwd_in_path
    if cwd in sys.path:
RuntimeError: maximum recursion depth exceeded in cmp

【问题讨论】:

  • 在 Red Hat Enterprise Linux Workstation 版本 7.3 (Maipo) 上使用 celery 4.0.2
  • 我也面临同样的问题。有人可以帮忙吗?在此先感谢:)。

标签: python recursion runtime-error celery


【解决方案1】:

当我尝试将 celery 3.1.25 升级到 4.1.0 时,我遇到了同样的错误。 所以基本上在 4.1.0 中,很少有软件包被弃用。因此,请确保您没有使用最新版本中已弃用的类。 就我而言,我使用的是 celery.worker.job.Request,它在 3.1.25 中已弃用,现在它是 celery.worker.request.Request

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 2014-05-08
    • 2021-12-11
    • 2017-08-24
    • 1970-01-01
    • 2016-12-10
    • 2016-11-11
    • 1970-01-01
    • 1970-01-01
    • 2019-01-18
    相关资源
    最近更新 更多