gpt4 book ai didi

Python 子进程 Popen 停滞 CGI 页面

转载 作者:行者123 更新时间:2023-11-28 17:50:19 26 4
gpt4 key购买 nike

我有一个正在使用的工具,我需要它来运行解析器并输出另一个分析日志。目前我有它,所以它是通过网络界面。

  1. 用户转到表单并提交文件名进行解析(文件已在系统中)。
  2. 表单向Python CGI脚本提交信息
  3. Python CGI 脚本运行并生成一个子进程来运行解析。
  4. 解析器找到适当的信息进行分析并生成子进程。

我正在使用

import subprocess
...
subprocess.Popen(["./program.py", input])

在我的代码中,我从文档中假设我们不会等待子进程终止,我们只是继续运行脚本。我的 CGI 脚本启动了这一切:

subprocess.Popen(["./program.py", input])
// HTML generation code
// Javascript to refresh after 1 second to a different page

HTML 生成代码仅输出我们已处理请求的状态,然后 javascript 将页面刷新到主页。

问题

CGI 页面挂起,直到子进程完成,这不是我想要的。我认为 Popen 不会等待子进程完成,但每当我运行此工具时,它都会停止运行直到完成。我希望脚本完成并让子进程在后台运行,让网页仍然正常运行,而不会让用户认为一切都因加载信号而停滞不前。

我似乎找不到 Popen 这样做的任何理由,因为我读到的所有地方都说它不等待,但它似乎是。

奇怪的是,apache 日志在脚本完成之前也显示:“请求正文读取超时”。那么 Apache 实际上是在拖延脚本吗?

抱歉,我不能展示完整的代码,因为它是“ secret ”的,但希望其中的逻辑有待理解。

最佳答案

Apache 可能会等待子进程完成。您可以尝试妖魔化 child (双叉,setsid)或更好地将作业提交给本地服务,例如,通过写入预定义文件或使用某些消息代理或通过更高级别的接口(interface)(例如 celery )

关于Python 子进程 Popen 停滞 CGI 页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11317489/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com