所以我有一个有FileField的Django模型。此FileField通常包含一个图像。收到来自请求的图片后,我需要运行一些图片分析过程。
问题是,有时,我需要在运行分析之前旋转图片(在celery中运行,再次加载模型,通过id获取实例)。因此,我得到图片,旋转它,并使用以下命令保存:
storage.save(image_name,new_image_file),其中存储是django的默认存储(使用亚马逊S3)
问题是在某些较小的情况下(假设千分之一),在执行旋转过程之后,在celery中运行分析过程时,图片并没有旋转,但是在那之后,如果我打开图像,图片已经旋转了,所以似乎save方法花费了一些时间来更新存储中的文件,(异步)...
有没有人遇到过类似的问题?有没有一种方法可以检查文件是否已经更新,比如使用回调或某种处理程序?
非常感谢!
发布于 2016-08-01 22:18:35
这里没有神奇的解决方案。您必须管理模型上的状态,特别是在处理芹菜任务时。您可能需要另一个名为state的字段,其状态为:NONE (未完成任何操作)、PROCESSING (任务已发送到celery进行处理)和DONE (图像已旋转)
NONE是默认状态。您应该在调用celery任务之前设置POCESSING状态(并且不在celery任务内部,因此已经有bug),最后,celery任务应该在完成时将状态设置为DONE。
当任务执行速度较快时,用户看不到任何差异,但当需要一段时间时,您可能想要添加一条消息“图像正在处理中,请重试”或类似的内容
至少我是这么做的..。希望这能有所帮助
https://stackoverflow.com/questions/38699927
复制相似问题