gpt4 book ai didi

python - 如何终止由 popen 创建并使用 communicate() 的进程?

转载 作者:太空宇宙 更新时间:2023-11-04 10:59:06 27 4
gpt4 key购买 nike

我有一个程序,P1,我需要使用不同的输入运行大约 24*20000 次。问题是 P1 挂起,我应该手动强制它(kill)。我的第一个解决方案是编写一个 python 脚本来调用 P1 并传递正确的输入并使用 popencommunicate 接收输出。但是由于等待输出的通信性质,只要它正在等待响应,我就不能终止进程。我在 Windows 上。

我尝试使用 multiprocess 函数,但它只运行 P1 并且无法将输入发送给它。我怀疑在 popen 中没有使用管道并尝试了一点,但我想我无法从 P1 接收输出。

有什么想法吗?

# This code run XLE and pass the intended input to it automatically
def startExe(programPath, programArgStr):
p = subprocess.Popen(programPath,stdout=subprocess.PIPE,stdin=subprocess.PIPE) p.stdin.write(programArgStr)
p.communicate()[0]
# Need to kill the process if it takes longer than it should here

def main(folder):
..
#loop
programArgStr = "create-parser"+path1+";cd "+ path2+"/s"+ command(counter) +";exit"

startExe(path, programArgStr)
..

如您所见,如果 P1 可以成功完成给定任务,它可以使用传递给它的退出命令自行退出!

最佳答案

如果您不需要使用 Python,您可以考虑使用 Cygwin Bash 和 timeout(1)命令以超时运行命令。但是,由于 Cygwin 的 fork() 实现速度不是很快,而且您正在创建大量进程,因此仅创建进程就可能产生巨大的开销(我不知道是否在这方面,原生 Windows 版本的 Python 要好得多。

或者,如果您有P1 的源代码,为什么不直接修改它以便它可以在一次调用中执行多次迭代?这样,您就不必处理创建和终止 480,000 个进程的问题,如果每次调用的工作量很小,这将产生巨大的不同。

关于python - 如何终止由 popen 创建并使用 communicate() 的进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7003836/

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