Python執行時動態檢視程序內部資訊

2021-08-19 07:43:01 字數 2036 閱讀 4583

接前兩篇「執行時檢視執行緒資訊」的部落格,我在想,既然我可以隨時列印執行緒資訊,那麼我是不是可以隨時列印程序內部的其它資訊呢?比如,實時檢視一些物件屬性等,這樣可以幫助我們在不重新啟動應用程式的情況下就可以觀察程序的執行狀態。(這裡暫時不考慮那些使用第三方庫或工具的情況)

根據這個想法,檢視了一下python的動態載入模組的方法,感覺這個想法還是比較靠譜,應該可以實現,所以動手寫了個小測試驗證了一把。(這裡說明一下,只是驗證性的,生產環境要使用的話,還是有不少問題需要考慮的。)

下面就是測試時考慮要做到的

- 還是使用 sigquit 訊號即「kill -3」來觸發執行列印程序內部物件屬性.

- foo.py主程式,包括註冊訊號處理函式,建立乙個全域性的物件用來儲存一些屬性,啟動乙個執行緒讓主線程不退出。

- foo.py主程式中的訊號處理函式動態載入乙個指定路徑的下的模組,這裡我們就假定這個模組路徑是」/tmp/my_modules」,可以根據需要修改。然後呼叫這個模組中的方法來列印一些程序資訊。

- /tmp/my_modules/bar.py需要動態載入的模組,其中訪問foo模組中的乙個物件,並列印物件屬性。

- 要能隨時動態修改要檢視的程序狀態,即在不重啟程序的情況下,通過修改bar.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'

deftest

():while

true:

print(datetime.now())

time.sleep(2)

# 訊號處理函式

defsignal_handler

(signum, frame):

try:

# 動態載入模組

# 匯入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)

#!/usr/bin/env /usr/bin/python3.4

# -*- coding: utf-8 -*-

import foo

defexecute

():# 列印foo模組中的物件

print

"my_object: %s " % foo.my_object.data

首先執行foo.py

$ python foo.py
然後找到foo.py的程序號,然後使用「kill -3」來觸發列印記憶體物件的方法

$ kill -3

此時應該可以看到foo.py程序列印my_object的屬性。

python 多程序執行時程序提前終止?

寫了一段 發現程序沒跑完就提前終止了?原因可能是程序執行一半出錯了!注意多執行緒情況下不報錯!from multiprocessing import process import os from multiprocessing import pool def run proc i a i 1 pri...

Nginx 檢視執行時狀態

無需重啟伺服器。在虛擬主機 假設為www.example.com 的配置檔案中加上 location nginxstatus則直接可以通過訪問 www.example.com nginxstatus檢視資訊 但是需要注意,在這裡我們開啟了安全驗證。auth basic nginx status 密碼...

IOS runtime動態執行時一

對執行時不太了解,今天小夥伴橄欖油陳高給發了個鏈結 看了一部分先存著以後慢慢品 今天一句一句的讀了下 慢慢有了點感覺,把主要的截圖貼在這以後好多看幾遍 typedef struct objc class class struct objc class class isa 指向metaclass,也就...