Celery任务参数的大小限制



我们有一个Celery任务,它需要一个Pandas数据帧作为输入。数据帧首先被序列化为JSON,然后作为参数传递到任务中。数据帧可以有大约35000个条目,这导致JSON字典占用大约700kB。我们使用Redis作为代理。

不幸的是,此任务中对delay()的调用通常花费太长时间(超过30秒(,并且我们的web请求超时。

这是Redis和Celery应该能够处理的规模吗?我认为这是在限制范围内的,问题出在其他地方,但我在互联网上找不到任何指导或经验。

我建议将json保存到您的数据库中,并将id传递给芹菜任务,而不是整个json。

class TodoTasks(models.Model):
serialized_json = models.TextField()

此外,您可以用几个字段记录任务的状态,甚至可以记录错误(我发现这对调试非常有用(:

import traceback
from django.db import models
class TodoTasks(models.Model):
class StatusChoices(models.TextChoices):
PENDING = "PENDING", "Awaiting celery to process the task"
SUCCESS = "SUCCESS", "Task done with success"
FAILED = "FAILED", "Task failed to be processed"
serialized_json = models.TextField()
status = models.CharField(
max_length=10, choices=StatusChoices.choices, default=StatusChoices.PENDING
)
created_date = models.DateTimeField(auto_now_add=True)
processed_date = models.DateTimeField(null=True, blank=True)
error = models.TextField(null=True, blank=True)
def handle_exception(self):
self.error = traceback.format_exc()

最新更新