python - 如何将 TemporaryUploadedFile 传递给 celery 任务?

标签 python django redis celery temporary-files

我有一个代码:

def post(self, request, *args, **kwargs):
    file = request.FILES["import_file"]
    # create a tast with celery and save ID of the task
    task_id = importing.delay(file).id
    return Response({"task_id": task_id}, content_type="application/json")

当 type(file) 为 TemporaryUploadedFile 时,出现错误,因为文件无法写入 redis。

我可以获取这个临时文件的名称并将该名称保存到 Redis 中。然后celeryworker可以从redis中获取这个名称并读取文件。但我不确定:在 celery worker 从 redis 获取其名称之前可以删除该文件吗?

最佳答案

TemporaryUploadedFile 一旦request_finished 被关闭并删除。信号被发射。当您的 Celery 工作人员访问该文件时,该文件很可能不再存在。

您应该将文件复制到持久位置,并在完成后让 Celery 清理该文件。

关于python - 如何将 TemporaryUploadedFile 传递给 celery 任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33920073/

相关文章:

python - 在 Pygame 中只填充一半的显示?

django - 我如何在序列化器中计算?

Django: 'Module' 对象没有属性 '__file__'

java - 使用 Vert.x for Java 的任何好的 Redis 客户端 API?

java - 如果存储对象的类名发生变化,如何反序列化存储在 redis 中的对象?

java - Redis的Redisson的API方法.unlock()未释放锁,尝试从同一实例进行

python - Flask SQLAlchemy 连接到 MySQL 数据库

python - asyncio.Condition 中的锁除了兼容 threading.Condition 之外还有其他用途吗?

python - 迭代时修改列表

django - AWS Elastic Beanstalk - 使用 Python 和 Django 环境使用 Mongodb 而不是 RDS