Я довольно новичок в использовании Celery и не могу правильно настроить result_backend. Я не могу получить результат из сгенерированного task_id (хотя задание выполняется). Я использую Docker для запуска этого и предоставляю права доступа к папке.
Я использую сельдерей с колбой и настройки следующие:
broker_api = 'http://guest:guest@rabbit:15672/api/'
broker = 'amqp://guest:guest@rabbit:5672//'
BROKER_URL = 'amqp://guest:guest@rabbit:5672//'
broker = 'amqp://rabbit'
backend = 'amqp'
celeryApp = Celery('buildq', broker=broker, backend=backend)
В конфигурации сельдерея у меня есть
CELERY_RESULT_BACKEND = 'file:///mnt/celery/results/'
CELERY_RESULT_PERSISTENT = True
Файл Docker-compose
services:
worker:
build: .
depends_on:
- rabbit
working_dir:
'/code'
entrypoint:
- celery
- worker
- --app
- BulkModlingQ.tasks
- --config
- celeryconfig
- --loglevel=info
flower:
build: .
depends_on:
- rabbit
- worker
ports:
- "5555:5555"
working_dir:
'/code'
entrypoint:
- celery
- flower
- --app
- BulkModlingQ.tasks
- --config
- flowerconfig
api:
build: .
depends_on:
- rabbit
working_dir:
'/code'
entrypoint:
- python
- -m
- BulkModlingQ.api
ports:
- "5000:5000"
rabbit:
image: rabbitmq:3-management
ports:
- "15672:15672"
В рабочих журналах тоже не возникает никаких ошибок.
ДАЖЕ, если я настрою настройку сельдерея для использования 's3' в качестве result_backend
CELERY_RESULT_BACKEND = 's3://'
S3_ACCESS_KEY_ID = '****'
S3_SECRET_ACCESS_KEY = '****'
S3_BUCKET = '****'
S3_BASE_PATH = 'celery'
S3_REGION = 'us-east-1'
Я получаюошибка, что строки не могут быть соединены байтами
[2019-10-18 22:17:04,571: ERROR/MainProcess] Pool callback raised exception: TypeError('can only concatenate str (not "bytes") to str')
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/billiard/pool.py", line 1750, in safe_apply_callback
fun(*args, **kwargs)
File "/usr/local/lib/python3.7/site-packages/celery/worker/request.py", line 371, in on_failure
store_result=self.store_errors,
File "/usr/local/lib/python3.7/site-packages/celery/backends/base.py", line 160, in mark_as_failure
traceback=traceback, request=request)
File "/usr/local/lib/python3.7/site-packages/celery/backends/base.py", line 342, in store_result
request=request, **kwargs)
File "/usr/local/lib/python3.7/site-packages/celery/backends/base.py", line 714, in _store_result
self.set(self.get_key_for_task(task_id), self.encode(meta))
File "/usr/local/lib/python3.7/site-packages/celery/backends/s3.py", line 70, in set
s3_object = self._get_s3_object(key)
File "/usr/local/lib/python3.7/site-packages/celery/backends/s3.py", line 56, in _get_s3_object
key_bucket_path = self.base_path + key if self.base_path else key
TypeError: can only concatenate str (not "bytes") to str