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)
| 归档时间: |
|
| 查看次数: |
3356 次 |
| 最近记录: |