【发布时间】:2020-03-04 16:45:06
【问题描述】:
我有一个 Django 应用程序,我正在使用 Celery、SQS 和 S3。 当我使用 Django、Celery 和 SQS 运行以下函数时,该函数可以正常工作,并且它应该每分钟打印一次“你好”。
from celery.task import periodic_task
from celery.schedules import crontab
@periodic_task(run_every=crontab(hour='*', minute='*', day_of_week="*"))
def print_hello():
print('hello world')
但该应用还链接到 S3 存储桶。每当一个新文件被保存到S3 a notification is sent to the SQS queue。将通知消息发送到 SQS 队列时会出现此问题。当通知到达队列时,worker 失败。它停止周期性任务 print_hello(),给出以下错误消息:
[2019-11-07 22:10:57,173: CRITICAL/MainProcess] 不可恢复的错误: 错误('不正确的填充') ...parserinvoker/lib64/python3.7/base64.py",第 87 行,在 b64decode 返回 binascii.a2b_base64(s) binascii.Error: 不正确的填充
然后退出。我一直在查看文档,并且整个星期都在尝试排除故障,但没有找到解决方案。我将我的 settings.py 包括在内,以防是配置问题
设置.py
BROKER_URL = "sqs://"
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TASK_SERIALIZER = 'json'
CELERY_DEFAULT_QUEUE = env('CELERY_DEFAULT_QUEUE')
CELERY_RESULT_BACKEND = None
BROKER_TRANSPORT_OPTIONS = {
'region': 'us-east-1',
'polling_interval':20,
'visibility_timeout': 3600,
'task_default_queue': env('CELERY_DEFAULT_QUEUE'),
}
【问题讨论】:
标签: django amazon-s3 celery amazon-sqs django-celery