Django:知道在使用storage.save()

时间:2016-08-01 13:15:12

标签: python django amazon-web-services amazon-s3

所以我有一个拥有FileField的Django模型。此FileField通常包含一个图像。从请求中收到图片后,我需要运行一些图片分析过程。

问题在于,有时候,我需要在运行分析之前旋转图片(在芹菜中运行,再次通过id加载模型获取实例)。所以我得到了图片,旋转并保存:

storage.save(image_name,new_image_file),其中storage是django默认存储(使用AWS S3)

问题在于,在一些小的情况下(假设1000中为1),在执行旋转过程后,在芹菜中运行分析过程时图片尚未旋转,但在此之后,如果我打开图像,已经旋转,所以似乎save方法需要一些时间来更新存储中的文件,(异步)......

有没有人有类似的问题?有没有办法检查文件是否已经更新,比如回调还是一种处理程序?

非常感谢!

1 个答案:

答案 0 :(得分:0)

这里没有神奇的解决方案。您必须管理模型上的状态,特别是在处理芹菜任务时。您可能需要另一个名为state的字段,状态为:NONE(未执行任何操作),PROCESSING(任务已发送给芹菜处理)和DONE(图片旋转了)

NONE是默认状态。你应该在调用celery任务之前设置POCESSING状态 (而不是芹菜任务内部,因此已经有bug),最后celery任务应该在完成时将状态设置为DONE。

当任务很快时,用户将看不到任何差异,但是当需要一些时间时,您可能想要添加消息"正在处理图像,请再试一次"或类似的东西

至少我是怎么做的......希望这有帮助