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

2024-06-28 20:55:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我在django应用程序中有两个独立的subprocess调用,每个调用都在不同的视图中。第一个调用dcraw图像转换工具获取上载的原始图像并将其转换为tiff。(.tiff输出通常比输入大9倍,例如8mb图像产生72mb tiff。)

pdcraw = subprocess.Popen(dcraw_args, stdout=None, stderr=None)
pdcraw.communicate()

我的第二个子进程调用一个matlab脚本来处理tiff并输出相关的数据文件和图像。当我自己运行脚本时,这个调用通常需要15-20秒。在

^{pr2}$

我的问题是:对于这两个子进程调用,我必须手动重新加载视图才能使它们实际运行。“围绕”它们的其余代码运行良好。有什么想法可以避免这种情况吗?我想知道这是否是某种缓存问题,因为我已经能够让第一个子进程在开始需要重新加载之前运行几次。非常感谢您的洞察力!先谢谢你。在

我尝试过的事情:

  • 在子流程周围插入time.sleep,认为这可能是个捷径。不起作用。在
  • stdout使用管道而不是None。不过,我认为应该使用None,因为我不需要从命令中读取结果(它们只是将图像输出到args中指定的目录)。在
  • 诅咒它。还在进行中。在

Tags: 工具django图像脚本none视图应用程序进程
1条回答
网友
1楼 · 发布于 2024-06-28 20:55:22

因为子进程的整个思想是异步的,所以当您的视图被解析到浏览器时,它还没有准备好。在

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

或者使用WebSockets,它可以在任何数据可用时立即发送,在保证超快速响应的同时不需要额外的请求。在

相关问题 更多 >