Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在OS X中检测挂起的python shell_Python_Multithreading_Macos_Terminal_Stdout - Fatal编程技术网

在OS X中检测挂起的python shell

在OS X中检测挂起的python shell,python,multithreading,macos,terminal,stdout,Python,Multithreading,Macos,Terminal,Stdout,我有一个程序,它实现了一个错误库,由于不正确地实现了并行,该库偶尔会挂起 我没有时间来解决核心问题,所以我正在寻找一种破解方法,以确定进程何时挂起,何时没有完成它的工作 是否有任何特定于OSX或python的API来执行此操作?是否可以使用另一个线程或甚至主线程重复解析stdout,以便在某个持续时间内最后几行没有更改时,通知另一个线程并可以杀死行为异常的线程?(然后重新启动?基本上,您正在寻找一个监视进程。它将运行一个命令(或一组命令)并观察它们的执行情况,以寻找特定的东西(在您的情况下,在s

我有一个程序,它实现了一个错误库,由于不正确地实现了并行,该库偶尔会挂起

我没有时间来解决核心问题,所以我正在寻找一种破解方法,以确定进程何时挂起,何时没有完成它的工作


是否有任何特定于OSX或python的API来执行此操作?是否可以使用另一个线程或甚至主线程重复解析stdout,以便在某个持续时间内最后几行没有更改时,通知另一个线程并可以杀死行为异常的线程?(然后重新启动?

基本上,您正在寻找一个监视进程。它将运行一个命令(或一组命令)并观察它们的执行情况,以寻找特定的东西(在您的情况下,在
stdout上保持沉默)
)。参考下面的两个问题(以及一些文档的简要介绍),您可以快速构建一个超级简单的监视器

# 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