[ TAG 154 ][22.09.2021] -Erfolgreich -IAP-20210601-20210722-1145 -RPRCSL -psutil

Ich habe die heute Worksession um [22.09.2021][0800] begonnen. Zu diesen Zeitpunkt haben wir den [22.09.2021][0953].

Gestern habe ich eine neue Liste eingeführt. Diese Liste wird im Hauptprozess geführt. Es enthält Instanzen und Informationen über die ausgeführten Prozesse.

Meine Überlegung besteht darin, Status-Informationen über die Prozesse zu speichern. Relevant wäre für mich, der Lebensverlauf von den Prozessen. Der gestrige Entwurf eines Items in dieser Liste sieht wie folgt aus. Es hat noch keine Informationen über den Ausführungsstatus.

s2 - p_itm: {
'inst': <Process name='Process-2' 
pid=16252 
parent=10416 
stopped 
exitcode=0>, 
'name': 'Process-2', 
'pid': 16252, 
'ppid': 10416, 
'authkey': b'}q\xe0\xceq\x1e\x06`pc\xbd\x04\xd5\xfb+k\xde\xef\x82Y\x83\xe7$\xa1\xaeT\xfa\xe2\x80\x8f\x7f;'
}
s2 - p.is_alive(): False

Ich denke um den Ausführungsstatus ordnungsgemäß erfassen zu können, benötige ich eine zusätzliche library. Meine kurze Recherche zu diesen Thema führte mich zu [psutil]. Zu diesen Zeitpunkt ist die Version [psutil 5.8.0] veröffentlicht. Auf den ersten Blick enthält die [psutil] sehr viele Informationen über die Hardware.

Ich finde jedoch heute sollte es nicht mein Entwicklungsschwerpunkt sein. Zu diesen Zeitpunkt sollte ich am besten eine vereinfachte Version der Status-Informationen einführen.

Die aktuelle Frage besteht darin, welche Methoden bzw. Werkzeuge stehen mir gerade in Python zu Verfügung?

In der [multiprocessing.Process]-Library von Python habe ich zu den Ausführungs-Status-Thema von Prozessen nicht viel gefunden. Es gibt die Methode [.is_alive()]. Die Methode gibt ein Boolean-Wert zurück, der aussagt ob der Prozess ausgeführt wird oder nicht.

[22.09.2021][1138] - Ich lese mir die Dokumentation von [psutil] durch. Es enthält sehr viele wichtige Informationen über die Hardware und über die laufenden Prozesse. Besonders die Konstanten, die den Status des Prozesses repräsentieren.
[22.09.2021][1443] - Ich musste um ca. [22.09.2021][1200] die Worksession unterbrechen. In dieser Zeit habe ich mich doch entschieden mit [psutil] zu arbeiten. Zumindest wollte ich heute die ersten Tests machen. Es hat doch schon sehr wichtige Funktionen, die die CPU, die Speicherverwaltung und Prozesse betreffen.

[22.09.2021][1447] - Installation
[22.09.2021][1500] - Erster Test

print("PSUTIL - TEST")
print(f"psutil.cpu_count(): {psutil.cpu_count()}")
print(f"psutil.cpu_count(logical=False): {psutil.cpu_count(logical=False)}")
print("")
-------------------------------------
Ausgabe:
-------------------------------------
PSUTIL - TEST
psutil.cpu_count(): 12
psutil.cpu_count(logical=False): 6

[22.09.2021][1520] - [Prozess Start]

p = Process(target=ALOG, args=(alog_glb.APL,))
p_itm = {"inst": p, "name": p.name, "pid": p.pid, "ppid": os.getpid(), "authkey": p.authkey}
print(f"s0 - p_itm: {p_itm}")
print(f"s0 - p.is_alive(): {p.is_alive()}")
print("")

p.start()
p_itm = {"inst": p, "name": p.name, "pid": p.pid, "ppid": os.getpid(), "authkey": p.authkey}
print(f"s1 - p_itm: {p_itm}")
print(f"s1 - p.is_alive(): {p.is_alive()}")
print("")

p_psutil = psutil.Process(p.pid)
p_name = None
p_pid = None
p_ppid = None
p_status = None
p_cpu_time = None
p_cpu_percent = None
p_create_time_0 = None
p_create_time_1 = None

with p_psutil.oneshot():
p_name = p_psutil.name()
p_pid = p_psutil.pid
p_ppid = p_psutil.ppid()
p_status = p_psutil.status()
p_cpu_time = p_psutil.cpu_times()
p_cpu_percent = p_psutil.cpu_percent()
p_create_time_0 = p_psutil.create_time()
p_create_time_1 = datetime.datetime.fromtimestamp(p_create_time_0).strftime("%Y-%m-%d %H:%M:%S")

print("")
print("PSUTIL - TEST")
print(f"p_name: {p_name}")
print(f"p_pid: {p_pid}")
print(f"p_ppid: {p_ppid}")
print(f"p_status: {p_status}")
print(f"p_cpu_time: {p_cpu_time}")
print(f"p_cpu_percent: {p_cpu_percent}")
print(f"p_create_time_0: {p_create_time_0}")
print(f"p_create_time_1: {p_create_time_1}")
print("")

p.join()
p_itm = {"inst": p, "name": p.name, "pid": p.pid, "ppid": os.getpid(), "authkey": p.authkey}
print(f"s2 - p_itm: {p_itm}")
print(f"s2 - p.is_alive(): {p.is_alive()}")
print("")
print("")
print("")
Ausgabe:
--------------------------------------------------

PROCESS_ALOG_20210726_0110 - START_PROCESS()
PROCESS_ALOG_20210726_0110 - APL_INIT(alog_glb)
# APL_INIT-Methode überprüft ob der Manager
# für die RPRCSL-Liste initialisiert wurde.
#
# Aufgrund der Performance wird der Manager
# beim Programm-Start initialisiert.
#
# In der Methode START_PROCESS()
# wir nur aus Sicherheitsgründen überprüft
# ob der Manager initialisiert wurde.


s0 - p_itm: {
'inst': <Process name='Process-2' parent=15696 initial>, 
'name': 'Process-2', 
'pid': None, 
'ppid': 15696, 
'authkey': b'\x1b\x93\xed\xd0&{?\xf7L\xd2pC\x14\xf8\xfc.\xb4p\x05\xa7\x9c\x8b\xfd\xb9-t\xbf\x07\xd1|Oq'
}
s0 - p.is_alive(): False

s1 - p_itm: {
'inst': <Process name='Process-2' pid=17824 parent=15696 started>, 
'name': 'Process-2', 
'pid': 17824, 
'ppid': 15696, 
'authkey': b'\x1b\x93\xed\xd0&{?\xf7L\xd2pC\x14\xf8\xfc.\xb4p\x05\xa7\x9c\x8b\xfd\xb9-t\xbf\x07\xd1|Oq'
}
s1 - p.is_alive(): True


PSUTIL - TEST
p_name: python.exe
p_pid: 17824
p_ppid: 15696
p_status: running
p_cpu_time: pcputimes(user=0.0, system=0.015625, children_user=0.0, children_system=0.0)
p_cpu_percent: 0.0
p_create_time_0: 1632319880.0076807
p_create_time_1: 2021-09-22 16:11:20

ALOG_20210722.GLOBALS_20210720_1330 - GLOBALS_20210720_1330
name:MKI_20210819.MKI_MAIN_20210819 MKI_MAIN_20210819
ALOG -> ALOG-Prozess wurde gestartet.
ALOG -> apl: []
ALOG -> pid wird zu apl hinzugefuegt.
ALOG -> apl: [17824]

s2 - p_itm: {
'inst': <Process name='Process-2' pid=17824 parent=15696 stopped exitcode=0>, 
'name': 'Process-2', 
'pid': 17824, 
'ppid': 15696, 
'authkey': b'\x1b\x93\xed\xd0&{?\xf7L\xd2pC\x14\xf8\xfc.\xb4p\x05\xa7\x9c\x8b\xfd\xb9-t\xbf\x07\xd1|Oq'
}
s2 - p.is_alive(): False

--------------------------------------------------
  • Quellen:
    • class psutil.Process(pid=None)
    • name()
      • []
    • pid
      • [https://psutil.readthedocs.io/en/latest/#psutil.Process.pid]
    • ppid()
      • [https://psutil.readthedocs.io/en/latest/#psutil.Process.ppid]
    • status()
      • [https://psutil.readthedocs.io/en/latest/#psutil.Process.status]
      • [https://psutil.readthedocs.io/en/latest/#process-status-constants]
    • cpu_time()
      • [https://psutil.readthedocs.io/en/latest/#psutil.Process.cpu_times]
    • cpu_percent()
      • [https://psutil.readthedocs.io/en/latest/#psutil.Process.cpu_percent]
    • create_time()
      • [https://psutil.readthedocs.io/en/latest/#psutil.Process.create_time]


[22.09.2021][1707] - Ich beende für heute die Worksession. Die heutige Arbeit legt die Grundlagen für [RPRCSL]-Liste. Diese Liste muss jedoch in den kommenden Worksessions entworfen und die Anwendungsgebiete erarbeitet werden.


Hochachtungsvoll
Artem Kraft




Kommentare

Beliebte Posts aus diesem Blog

[ TAG 38 ][29.05.2021] - Erfolgreich - Freelancer-Portale

[ TAG 747 ][07.04.2023] -Erfolgreich -BNKTRS -Google Code -Objekt und Methodenliste

[ TAG 52 ][12.06.2021] - Erfolgreich - IAP-20210601-20210609-2325