gpt4 book ai didi

python - 超时后在Python中杀死子进程

转载 作者:太空宇宙 更新时间:2023-11-04 01:34:54 26 4
gpt4 key购买 nike

我在互联网上搜索并学习了其他实现方法现在我发现了问题。我的执行时间总是不止于此如果我在 subprocess.Popen 中写入 stdout=subprocess.PIPE 超时。如果我要删除它,那么它需要正常的执行时间

import subprocess, datetime, os, time, signal
//setting time for timeout
timeout=3
start = datetime.datetime.now()
process = subprocess.Popen(["python", "/home/bourne/untitled.py"],shell=False, stdout=subprocess.PIPE,stderr=subprocess.PIPE)
while process.poll() is None:
time.sleep(0.1)
now = datetime.datetime.now()
if (now - start).seconds > timeout:
os.kill(process.pid, signal.SIGKILL)
os.waitpid(-1, os.WNOHANG)
print "error"
print (now - start).seconds
break
print (now - start).seconds

最佳答案

您不应该仅仅因为它在 5 秒内超时就产生一个新线程,然后使用它的 isAlive 状态作为繁忙等待的中断条件。你不需要额外的线程,你可以在第一个线程中弄乱时间。

与其尽可能频繁地轮询线程,不如使用延迟 (time.sleep) 让处理器做一些真正的工作。

而且您应该知道,如果您的进程正在生成大量输出,如果您在进程执行期间不读取它并让它填满管道的缓冲区,它将阻塞。

关于python - 超时后在Python中杀死子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10733919/

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