gpt4 book ai didi

python - 检测 OS X 中挂起的 python shell

转载 作者:太空宇宙 更新时间:2023-11-03 18:35:56 25 4
gpt4 key购买 nike

我有一个程序,它实现了一个有缺陷的库,该库偶尔会由于并行化实现不当而挂起。

我没有时间解决核心问题,因此我正在寻找一种破解方法来确定进程何时挂起并且未完成其工作。

是否有任何 OS X 或 python 特定的 API 可以执行此操作?是否可以使用另一个线程甚至主线程重复解析 stdout ,以便当最后几行在一定时间内没有更改时,另一个线程会收到通知并可以杀死行为不当的线程? (然后重新启动?

最佳答案

基本上,您正在寻找一个监视进程。它将运行一个命令(或一组命令)并观察其执行情况以查找特定的内容(在您的情况下,stdout 上保持沉默)。引用下面的 2 个 SO 问题(并简要浏览一些文档),您可以快速构建一个 super 简单的监视器。

https://stackoverflow.com/questions/2804543/read-subprocess-stdout-line-by-line https://stackoverflow.com/questions/3471461/raw-input-and-timeout

# monitor.py
import subprocess

TIMEOUT = 10
while True:
# start a new process to monitor
# you could also run sys.argv[1:] for a more generic monitor
child = subprocess.Popen(['python','other.py','arg'], stdout=subprocess.PIPE)
while True:
rlist,_,_ = select([child.stdout], [], [], TIMEOUT)
if rlist:
child.stdout.read() # do you need to save the output?
else:
# timeout occurred, did the process finish?
if child.poll() is not None:
# child process completed (or was killed, but didn't hang), we are done
sys.exit()
else:
# otherwise, kill the child and start a new one
child.kill()
break

关于python - 检测 OS X 中挂起的 python shell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21609961/

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