Celery = > RecursionError: maximum recursion depth exceeded while calling a Python object

822 views
Skip to first unread message

方九龙

unread,
Apr 26, 2021, 2:51:20 AM4/26/21
to celery-users

I have encountered some problems about 'celery' and ask for your help

1、When running in Django, a bug appears as follows

```
RecursionError: maximum recursion depth exceeded while calling a Python object

Because the middle string is all partial omission in the loop recursion error,So I've omitted some of them


[2021-04-26 11:50:26,017] [log.py:222] [log:log_response] [ERROR]- Internal Server Error: /stark/backend/tasks/create/1/
Traceback (most recent call last):
  File "E:\Project\bkb\venv\lib\site-packages\celery\local.py", line 301, in _get_current_object
    return object.__getattribute__(self, '__thing')
AttributeError: 'PromiseProxy' object has no attribute '__thing'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "E:\Project\bkb\venv\lib\site-packages\kombu\utils\objects.py", line 41, in __get__
    return obj.__dict__[self.__name__]
KeyError: 'data'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "E:\Project\bkb\venv\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "E:\Project\bkb\venv\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "E:\Project\bkb\venv\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "E:\Project\bkb\BkbManage\stark\service\v1.py", line 632, in inner
    return func(request, *args, **kwargs)
  File "E:\Project\bkb\BkbManage\backend\views\tasks\task_view.py", line 102, in create_task
    queryset = self.params_handling(request, pk, queryset, serial)
  File "E:\Project\bkb\BkbManage\backend\views\tasks\task_view.py", line 77, in params_handling
    task_executer(pk, serial, queryset)
  File "E:\Project\bkb\BkbManage\backend\views\tasks\task_send.py", line 16, in task_executer
    task.apply_async(kwargs=queryset, retry=True, queue=serial, routing_key=serial, countdown=int(delayed))
  File "E:\Project\bkb\venv\lib\site-packages\celery\local.py", line 143, in __getattr__
    return getattr(self._get_current_object(), name)
  File "E:\Project\bkb\venv\lib\site-packages\celery\local.py", line 303, in _get_current_object
    return self.__evaluate__()
  File "E:\Project\bkb\venv\lib\site-packages\celery\local.py", line 333, in __evaluate__
    thing = Proxy._get_current_object(self)
  File "E:\Project\bkb\venv\lib\site-packages\celery\local.py", line 105, in _get_current_object
    return loc(*self.__args, **self.__kwargs)
  File "E:\Project\bkb\venv\lib\site-packages\celery\app\base.py", line 472, in _task_from_fun
    task.bind(self)  # connects task to this app
  File "E:\Project\bkb\venv\lib\site-packages\celery\app\task.py", line 332, in bind
    setattr(cls, attr_name, conf[config_name])
  File "E:\Project\bkb\venv\lib\site-packages\celery\utils\collections.py", line 391, in __getitem__
    return getitem(k)
  File "E:\Project\bkb\venv\lib\site-packages\celery\utils\collections.py", line 249, in __getitem__
    return mapping[_key]
  File "D:\Program Files\Python38\lib\collections\__init__.py", line 1006, in __getitem__
    if key in self.data:
  File "E:\Project\bkb\venv\lib\site-packages\celery\utils\collections.py", line 111, in __getattr__
    return self[k]
  File "D:\Program Files\Python38\lib\collections\__init__.py", line 1006, in __getitem__
    if key in self.data:
  File "E:\Project\bkb\venv\lib\site-packages\celery\utils\collections.py", line 111, in __getattr__
    return self[k]
  File "D:\Program Files\Python38\lib\collections\__init__.py", line 1006, in __getitem__
    if key in self.data:
  File "E:\Project\bkb\venv\lib\site-packages\celery\utils\collections.py", line 111, in __getattr__
    return self[k]
  File "D:\Program Files\Python38\lib\collections\__init__.py", line 1006, in __getitem__
    if key in self.data:
  File "E:\Project\bkb\venv\lib\site-packages\celery\utils\collections.py", line 111, in __getattr__
    return self[k]
  File "D:\Program Files\Python38\lib\collections\__init__.py", line 1006, in __getitem__
    if key in self.data:
  File "E:\Project\bkb\venv\lib\site-packages\celery\utils\collections.py", line 111, in __getattr__
  File "D:\Program Files\Python38\lib\collections\__init__.py", line 1006, in __getitem__
    if key in self.data:
  File "E:\Project\bkb\venv\lib\site-packages\celery\utils\collections.py", line 111, in __getattr__
    return self[k]
  File "D:\Program Files\Python38\lib\collections\__init__.py", line 1006, in __getitem__
    if key in self.data:
  File "E:\Project\bkb\venv\lib\site-packages\celery\utils\collections.py", line 111, in __getattr__
    return self[k]
  File "D:\Program Files\Python38\lib\collections\__init__.py", line 1006, in __getitem__
    if key in self.data:
  File "E:\Project\bkb\venv\lib\site-packages\kombu\utils\objects.py", line 43, in __get__
    value = obj.__dict__[self.__name__] = self.__get(obj)
  File "E:\Project\bkb\venv\lib\site-packages\celery\app\base.py", line 138, in data
    return self.callback()
  File "E:\Project\bkb\venv\lib\site-packages\celery\app\base.py", line 928, in _finalize_pending_conf
    conf = self._conf = self._load_config()
  File "E:\Project\bkb\venv\lib\site-packages\celery\app\base.py", line 938, in _load_config
    self.loader.config_from_object(self._config_source)
  File "E:\Project\bkb\venv\lib\site-packages\celery\loaders\base.py", line 123, in config_from_object
    obj = self._smart_import(obj, imp=self.import_from_cwd)
  File "E:\Project\bkb\venv\lib\site-packages\celery\loaders\base.py", line 141, in _smart_import
    return imp(path)
  File "E:\Project\bkb\venv\lib\site-packages\celery\loaders\base.py", line 92, in import_from_cwd
    return import_from_cwd(
  File "E:\Project\bkb\venv\lib\site-packages\celery\utils\imports.py", line 100, in import_from_cwd
    return imp(module, package=package)
  File "E:\Project\bkb\venv\lib\site-packages\celery\loaders\base.py", line 89, in import_module
    return importlib.import_module(module, package=package)
  File "D:\Program Files\Python38\lib\importlib\__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 914, in _find_spec
  File "<frozen importlib._bootstrap_external>", line 1342, in find_spec
  File "<frozen importlib._bootstrap_external>", line 1314, in _get_spec
  File "<frozen importlib._bootstrap_external>", line 1466, in find_spec
  File "<frozen importlib._bootstrap_external>", line 64, in _path_join
  File "<frozen importlib._bootstrap_external>", line 64, in <listcomp>
RecursionError: maximum recursion depth exceeded while calling a Python object
[2021-04-26 11:50:26,042] [runserver.py:160] [runserver:log_action] [ERROR]- HTTP POST /stark/backend/tasks/create/1/ 500 [33.32, 127.0.0.1:55074]
[2021-04-26 11:50:28,826] [runserver.py:147] [runserver:log_action] [INFO]- HTTP GET /favicon.ico 200 [0.00, 127.0.0.1:55074]


```

2、The following are the Celery related configuration parameters
```python
server_provider/server_celery/celery.py

from celery import Celery

app = Celery(main='celery', include=['server_provider.task.tasks'])

app.config_from_object('server_provider.server_celery.conf.config')

app.autodiscover_tasks(['server_provider.task.tasks', ])

```

```python
server_provider/server_celery/config.py

from kombu import Exchange, Queue

from backend.models import Device

# celery
broker_url = "amqp://chris:@kaVDH%K...@192.168.31.52:5672/bkb"
result_backend = "redis://:c6e71944...@192.168.31.52:6379/0"
accept_content = ['json']
timezone = "Asia/Hong_Kong"
worker_concurrency = 1
result_expires = 60 * 60 * 24
udids = [queryset.get('udid') for queryset in Device.objects.all().only('udid').values()]
task_queues = [Queue(f'{udid}', Exchange(f'{udid}'), routing_key=f'{udid}') for udid in udids] + \
[Queue('celery', Exchange('celery'), routing_key='celery')]

```

```python
server_provider/__init__.py

from server_provider.server_celery.celery import app as celery_app
__all__ = ('celery_app',)

```

```python
server_provider/task/tasks.py

from server_provider.server_celery.celery import app

'''任务库'''


@app.task()
def task_tiktok_get_account_info(serial, task_id="test001", language="en", username=None, ):
return serial


@app.task
def task_tiktok_get_all_accounts_info(serial, task_id="test001", language="en", ):
return serial

```




Reply all
Reply to author
Forward
0 new messages