在Python运行时动态查看进程内部信息的方法


Posted in Python onFebruary 22, 2019

接前两篇“运行时查看线程信息”的博客,我在想,既然我可以随时打印线程信息,那么我是不是可以随时打印进程内部的其它信息呢?比如,实时查看一些对象属性等,这样可以帮助我们在不重新启动应用程序的情况下就可以观察进程的执行状态。(这里暂时不考虑那些使用第三方库或工具的情况)

根据这个想法,查看了一下python的动态加载模块的方法,感觉这个想法还是比较靠谱,应该可以实现,所以动手写了个小测试验证了一把。(这里说明一下,只是验证性的,生产环境要使用的话,还是有不少问题需要考虑的。)

下面就是测试时考虑要做到的

- 还是使用 SIGQUIT 信号即“kill -3”来触发执行打印进程内部对象属性.

- foo.py主程序,包括注册信号处理函数,创建一个全局的对象用来保存一些属性,启动一个线程让主线程不退出。

- foo.py主程序中的信号处理函数动态加载一个指定路径的下的模块,这里我们就假定这个模块路径是”/tmp/my_modules”,可以根据需要修改。然后调用这个模块中的方法来打印一些进程信息。

- /tmp/my_modules/bar.py需要动态加载的模块,其中访问foo模块中的一个对象,并打印对象属性。

- 要能随时动态修改要查看的进程状态,即在不重启进程的情况下,通过修改bar.py文件修改要实现查看的内容。

主程序 foo.py

#!/usr/bin/env /usr/bin/python3.4
# -*- coding: utf-8 -*-
import sys
import threading
import signal
from datetime import datetime
import time


class MyObject(object):
  def __init__(self):
    self.data = {}
    self.data['a'] = 'aaa'
    self.data['b'] = 'bbb'
    self.data['c'] = 'ccc'


def test():
  while True:
    print(datetime.now())
    time.sleep(2)

# 信号处理函数
def signal_handler(signum, frame):
  try:
    # 动态加载模块
    sys.path.append("/tmp/my_modules")

    # 导入bar模块
    bar = __import__('bar')

    # 重新加载模块,为的是可以随时重新加载模块
    reload(bar)

    # 调用动态加载模块的方法
    bar.execute()
  except BaseException as e:
    print(e)


my_object = MyObject()

if __name__ == "__main__":
  try:
    signal.signal(signal.SIGQUIT, signal_handler)

    threading.Thread(target=test).start()

    while True:
      time.sleep(60)
  except KeyboardInterrupt:
    sys.exit(1)

需要动态加载的模块 /tmp/my_modules/bar.py

#!/usr/bin/env /usr/bin/python3.4
# -*- coding: utf-8 -*-
import foo


def execute():
  # 打印foo模块中的对象
  print "my_object: %s " % foo.my_object.data

测试

首先运行foo.py

$ python foo.py

然后找到foo.py的进程号,然后使用“kill -3”来触发打印内存对象的方法

$ kill -3 <pid>

此时应该可以看到foo.py进程打印my_object的属性。

修改一下 /tmp/my_modules/bar.py 文件,然后再次运行“$ kill -3 ”,可以看到模块被重新加载了,然后打印的新的内容。

以上这篇在Python运行时动态查看进程内部信息的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python工程师面试题 与Python基础语法相关
Jan 14 Python
Python标准库sched模块使用指南
Jul 06 Python
Python 中 Virtualenv 和 pip 的简单用法详解
Aug 18 Python
Python进程间通信之共享内存详解
Oct 30 Python
Python3之文件读写操作的实例讲解
Jan 23 Python
PyQt5每天必学之弹出消息框
Apr 19 Python
对Python 网络设备巡检脚本的实例讲解
Apr 22 Python
python实现批量图片格式转换
Jun 16 Python
python使用布隆过滤器的实现示例
Aug 20 Python
Python进度条的使用
May 17 Python
手把手教你怎么用Python实现zip文件密码的破解
May 27 Python
使用python+pygame开发消消乐游戏附完整源码
Jun 10 Python
Python开启线程,在函数中开线程的实例
Feb 22 #Python
python 多线程串行和并行的实例
Feb 22 #Python
Python OOP类中的几种函数或方法总结
Feb 22 #Python
VSCode Python开发环境配置的详细步骤
Feb 22 #Python
python中logging模块的一些简单用法的使用
Feb 22 #Python
Python 限制线程的最大数量的方法(Semaphore)
Feb 22 #Python
Python3.6.x中内置函数总结及讲解
Feb 22 #Python
You might like
咖啡与牛奶
2021/03/03 冲泡冲煮
PHP包含文件函数include、include_once、require、require_once区别总结
2014/04/05 PHP
PHP中使用Memache作为进程锁的操作类分享
2015/03/30 PHP
微信公众平台开发实现2048游戏的方法
2015/04/15 PHP
在php中设置session用memcache来存储的方法总结
2016/01/14 PHP
JS操作Cookie写入和读取实例代码
2013/10/20 Javascript
document.addEventListener使用介绍
2014/03/07 Javascript
4种JavaScript实现简单tab选项卡切换的方法
2016/01/06 Javascript
一道常被人轻视的web前端常见面试题(JS)
2016/02/15 Javascript
详解Javascript继承的实现
2016/03/25 Javascript
js解决movebox移动问题
2016/03/29 Javascript
半个小时学json(json传递示例)
2016/12/25 Javascript
微信小程序 简单教程实例详解
2017/01/13 Javascript
Vue中component标签解决项目组件化操作
2020/09/04 Javascript
让你30分钟快速掌握vue3教程
2020/10/26 Javascript
Python实现检测服务器是否可以ping通的2种方法
2015/01/01 Python
详解python3安装pillow后报错没有pillow模块以及没有PIL模块问题解决
2019/04/17 Python
python实现五子棋小程序
2019/06/18 Python
python实现桌面气泡提示功能
2019/07/29 Python
Python + selenium + crontab实现每日定时自动打卡功能
2020/03/31 Python
关于python3.7安装matplotlib始终无法成功的问题的解决
2020/07/28 Python
Django正则URL匹配实现流程解析
2020/11/13 Python
美国汽车交易网站:Edmunds
2016/08/17 全球购物
Nike爱尔兰官方网站:Nike.com (IE)
2018/03/12 全球购物
Lookfantastic意大利官网:英国知名美妆购物网站
2019/05/31 全球购物
Linux中如何用命令创建目录
2016/12/02 面试题
同步和异步有何异同,在什么情况下分别使用他们
2013/04/09 面试题
车祸赔偿收入证明
2014/01/09 职场文书
电气自动化个人求职信范文
2014/02/03 职场文书
便利店投资创业计划书
2014/02/08 职场文书
买卖合同协议书范本
2014/10/18 职场文书
计算机考试作弊检讨书1000字
2015/01/01 职场文书
介绍信如何写
2015/01/31 职场文书
收银员岗位职责
2015/02/03 职场文书
村官2015年度工作总结
2015/10/14 职场文书
2019年英语版感谢信(8篇)
2019/09/29 职场文书