Celery链式任务报错:'UUID'/'str'对象无'game_id'属性
问题:Celery链式调用中出现
AttributeError: 'UUID/str' object has no attribute 'game_id' 问题场景
我通过以下代码链式调用Celery任务:
tasks_chain = chain(create_game_folder.si(instance.id)) tasks_chain |= download_game.si(instance.id).set( task_id=str(task_id) )
执行时触发错误:
logger.debug(f"{game_id=}") AttributeError: 'UUID' object has no attribute 'game_id'
尝试将instance.id转为字符串后,依然报错:
AttributeError: 'str' object has no attribute 'game_id'
任务函数定义
创建文件夹的任务函数代码如下:
@shared_task() def create_game_folder(game_id): logger.info("create_game_folder") logger.debug(f"{game_id=}") game = Game.objects.get(id=game_id)
疑问
为什么会尝试从UUID/字符串对象中获取game_id属性?是否是.si()/.delay()`的后台处理逻辑导致的?
附相关配置信息
Celery服务配置(/etc/systemd/system/celery.service)
[Unit] Description=Celery Service Requires=django-app.service After=django-app.service [Service] Type=forking User=david Group=vboxsf RuntimeDirectory=celery WorkingDirectory=/var/www/html/django-app.com ExecStart=poetry run celery -A game_manager multi start worker --loglevel="INFO" --concurrency=5 ExecStop=poetry run celery multi stopwait worker --loglevel="INFO" ExecReload=poetry run celery -A game_manager multi restart worker --loglevel="INFO" --concurrency=5 Restart=always [Install] WantedBy=multi-user.target
Celery配置
# Celery configuration CELERY_BROKER_URL = "redis://localhost:6379" CELERY_RESULT_BACKEND = "redis://localhost:6379" CELERY_TASK_SERIALIZER = 'json' CELERY_RESULT_SERIALIZER = 'json' CELERY_ACCEPT_CONTENT = ['json'] CELERY_TIMEZONE = 'UTC' CELERY_ENABLE_UTC = True
Django应用服务配置(/etc/systemd/system/django-app.service)
[Unit] Description=Start Django app After=network.target [Service] User=david Group=david Environment="PYTHONUNBUFFERED=TRUE" WorkingDirectory=/var/www/html/django-app.com ExecStart=poetry run gunicorn game_manager.wsgi:application --config game_manager/gunicorn_conf.py --reload [Install] WantedBy=multi-user.target
内容的提问来源于stack exchange,提问作者Daviid
相关产品推荐
相关产品推荐

