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

标签 python django firefox subprocess

我在 Django 应用程序中有两个单独的 subprocess 调用,每个都在不同的 View 中。首先调用dcraw图片转换工具,将上传的raw图片转为tiff。 (.tiff 输出通常是输入的九倍,例如 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()

我的问题:对于这两个子进程调用,我必须手动重新加载 View 才能真正运行。 “围绕”它们的其余代码运行良好。关于如何避免这种情况的任何想法?我想知道这是否是某种缓存问题,因为我已经能够让第一个子进程在开始需要重新加载之前运行几次。非常感谢您的见解!先感谢您。

我尝试过的事情:

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

最佳答案

因为子进程的整个概念是异步的,所以当您的 View 被解析到浏览器时它不会就绪。

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

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

关于python - 为什么我的子进程调用需要重新加载页面才能执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7289741/

相关文章:

html - 为什么在 Firefox 中单击 css-grid 区域时整个网站都突出显示?

jquery - Ajax 在 Firefox 中正确实现了吗?同步发行

python - 文件在 Django/Nginx 中无法正确下载

django cms 搜索多个站点?

python - 如何更改名称/标签以删除 Django 管理中更改列表页面中的对象

django - 如何检查一个项目是否在另一个项目的多对多字段中?

javascript - Internet Explorer 7 - Javascript 'undefined' 未测试

python - 使用 --pool-emr-job-flows 时,MRJob 无法在 EMR 上启动新作业

python - 更多关于 python ImportError 没有命名的模块

javascript - 检查 get api 的响应是否是原型(prototype)对象