我在django应用程序中有两个单独的subprocess
调用,每个调用都在不同的视图中。第一个调用dcraw图像转换工具来获取上传的原始图像并将其转换为tiff。 (.tiff输出通常比输入大9倍,例如8mb图像产生72mb tiff。)
pdcraw = subprocess.Popen(dcraw_args, stdout=None, stderr=None)
pdcraw.communicate()
我的第二个子进程调用一个matlab脚本来处理tiff并输出相关的数据文件和图像。当我自己运行脚本时,此调用通常需要15-20秒。
result = subprocess.Popen(matlab_args, stdout=None, stderr=None)
result.communicate()
我的问题:对于这两个子进程调用,我必须手动重新加载视图才能实际运行。其余代码“围绕”它们运行良好。有关如何避免这种情况的任何想法?我想知道它是否是某种缓存问题,因为我已经能够在开始需要重新加载之前让第一个子进程运行几次。非常感谢您的见解!先感谢您。
我尝试过的事情:
time.sleep
,想一想它可能会缩短。不行。 None
使用管道代替stdout
。我想我应该使用None
,因为我不需要从命令中读取结果(它们只是将图像输出到args中指定的目录)。 答案 0 :(得分:0)
因为子进程的整个想法是异步的,所以当你的视图被解析为浏览器时它就不会准备就绪。
也许您发出Ajax请求来检查进度状态,一旦文件可用,它们就可以由服务器发送。
或者您使用WebSockets,它可以在任何数据可用时立即发送,省略了额外请求,同时保证了超级响应。