【问题标题】:Probing running python process for information探测正在运行的 python 进程以获取信息
【发布时间】:2016-04-23 03:09:04
【问题描述】:

我创建了一个 python(和 C,但“控制”部分是 Python)程序,用于使用马尔可夫链蒙特卡罗方法执行贝叶斯反演。不幸的是,McMC 可能需要几天时间才能运行。我的部分研究是减少时间,但我们只能减少这么多。

我在使用 nohup 的无头 Centos 7 机器上运行它,因为保持连接和接收打印数天是不切实际的。但是,我希望能够偶尔检查一下我的程序,看看它完成了多少次迭代,有多少个提案被接受,它是否已经过时等等。

有什么东西可以用来与 python 进程交互来获取这些信息吗?

【问题讨论】:

  • 你可能对 screen 或 tmux 感兴趣
  • 您可以使用信号处理程序,例如SIGUSR1,以使进程打印一些信息。也可以将 mosh 签出为“更好的 ssh”。使用mosh,您可以通过不可靠的连接轻松保持tmuxscreen 会话打开。
  • 你可以attach a debugger (gdb) 但提供一个远程 (ssh) (i)python REPL 在你的应用程序上下文中运行可能更方便(即,你可以使用你的程序的交互式对象),请参阅twisted manhole example

标签: python linux python-3.x


【解决方案1】:

我会推荐SAWs(科学应用网络服务器)。它在您的进程中创建一个线程来处理 HTTP 请求。感兴趣的变量以 JSON 格式返回给客户端。

对于由python运行时管理的变量,将它们写入硬盘(或任何共享内存)上的(JSON)文件并使用SimpleHTTPServer提供服务。只要遵循 SAW 的 JSON 格式,客户端的 SAW Web 界面仍然可以使用。

【讨论】:

  • 这看起来很简洁,但不幸的是大部分信息来自程序的python部分。你知道python有没有类似的东西?
  • 然后您可以继续更新硬盘(或任何共享内存)上的文件(可能使用JSON)并使用SimpleHTTPServer 服务它。如果您模仿 SAW 的 JSON 格式,则可以重用其 Web 应用程序。
  • 谢谢@gdlmx。我想我会用烧瓶来做这件事,因为这是我最熟悉的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-29
  • 2017-03-06
  • 1970-01-01
相关资源
最近更新 更多