Celery 任务参数的大小限制?

bid*_*sby 11 python redis celery celery-task

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

不幸的是,对该任务的调用delay()通常花费太长时间(超过三十秒),并且我们的网络请求超时。

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

小智 2

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

class TodoTasks(models.Model):
    serialized_json = models.TextField()
Run Code Online (Sandbox Code Playgroud)

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

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()
Run Code Online (Sandbox Code Playgroud)