所以我有一个拥有FileField的Django模型。此FileField通常包含一个图像。从请求中收到图片后,我需要运行一些图片分析过程。
问题在于,有时候,我需要在运行分析之前旋转图片(在芹菜中运行,再次通过id加载模型获取实例)。所以我得到了图片,旋转并保存:
storage.save(image_name,new_image_file),其中storage是django默认存储(使用AWS S3)
问题在于,在一些小的情况下(假设1000中为1),在执行旋转过程后,在芹菜中运行分析过程时图片尚未旋转,但在此之后,如果我打开图像,已经旋转,所以似乎save方法需要一些时间来更新存储中的文件,(异步)......
有没有人有类似的问题?有没有办法检查文件是否已经更新,比如回调还是一种处理程序?
非常感谢!
答案 0 :(得分:0)
这里没有神奇的解决方案。您必须管理模型上的状态,特别是在处理芹菜任务时。您可能需要另一个名为state
的字段,状态为:NONE
(未执行任何操作),PROCESSING
(任务已发送给芹菜处理)和DONE
(图片旋转了)
NONE是默认状态。你应该在调用celery任务之前设置POCESSING状态 (而不是芹菜任务内部,因此已经有bug),最后celery任务应该在完成时将状态设置为DONE。
当任务很快时,用户将看不到任何差异,但是当需要一些时间时,您可能想要添加消息"正在处理图像,请再试一次"或类似的东西
至少我是怎么做的......希望这有帮助