为什么我的子进程调用需要执行页面重新加载?

时间:2011-09-02 22:18:57

标签: python django firefox subprocess

我在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中指定的目录)。
  • 诅咒它。仍在进行中。

1 个答案:

答案 0 :(得分:0)

因为子进程的整个想法是异步的,所以当你的视图被解析为浏览器时它就不会准备就绪。

也许您发出Ajax请求来检查进度状态,一旦文件可用,它们就可以由服务器发送。

或者您使用WebSockets,它可以在任何数据可用时立即发送,省略了额外请求,同时保证了超级响应。