[ TAG 155 ][23.09.2021] -Erfolgreich -IAP-20210601-20210722-1145 -RPRCSL

Ich deklariere diesen Beitrag als erfolgreich obwohl es sich hier um einen Nachtrag handelt.

Der Nachtrag findet um [24.09.2021][0813] statt. 

Gestern habe ich eine sehr interessante Eigenschaft des Python [Manager]-Moduls entdeckt. Es geht um den Entwurf der [RPRCSL]-Liste.

In dieser Liste sammle ich Informationen über die initialisierten Prozesse. Realisiert habe ich es mit einen Python-Dictionary des [Manager]-Moduls. Um diese Aufgaben realisieren zu können, muss ich auf Items des Dictionary zu greifen und dessen Eigenschaften verändern.

Das ist jedoch nicht möglich.

Die einzelnen Eigenschaften der Items im [Manager-Dictionary]-Modul können nicht verändert werden. Stattdessen muss der gesamte Item neu erstellt werden.

ENTWICKLUNGS-STATUS[23.09.2021]

def ALOG(rprcsl):
print("ALOG -> Prozess ist gestartet.")
print("ALOG -> pid wird ermittelt.")
pid = os.getpid()
print(f"ALOG -> pid[{pid}] wurde ermittelt.")
print("ALOG -> RPRCSL-Eintrag wird vorbereitet.")
RPRCSL_ADD(rprcsl, pid)
print(f"ALOG -> RPRCSL pid[{pid}] wurde registriert.")
print(f"ALOG -> RPRCSL: {rprcsl}")

print("ALOG -> WARTE-DUMMY wird gestartet.")
i = 0
while i > 100000:
i += 1
print("ALOG -> WARTE-DUMMY wurde beendet.")

print("ALOG -> Erstelle eine [pid_copy] Kopie")
RPRCSL_EVNT_CLOSE(rprcsl, pid, RPRCSL_COPY(rprcsl, pid))
print(f"ALOG -> RPRCSL: {rprcsl}")



#RPRCSL_EVNT_CLOSE(rprcsl[pid])




def START_PROCESS(alog_glb):
p_itm = None

print("")
print("")


print("PROCESS_ALOG_20210726_0110 - START_PROCESS()")
APL_INIT(alog_glb)
RPRCSL_INIT(alog_glb)
print("")

print("START_PROCESS ->[0] Process wird initialisiert.")
p = Process(target=ALOG, args=(alog_glb.RPRCSL,))
print("START_PROCESS ->[0] Process wurde erfolgreich initialisiert.")
print("")

print("START_PROCESS ->[1] Process wird gestartet.")
p.start()
print("START_PROCESS ->[1] Process wurde erfolgreich gestartet.")
print("")

print("START_PROCESS ->[2] p.join() wird ausgeführt")
p.join()
print("START_PROCESS ->[2] p.join() wurde durchgeführt")
print("")


print(f"START_PROCESS -> alog_glb.RPRCSL: {alog_glb.RPRCSL}")

print("")
print("")


def STOP_LAST_PROCESS(alog_glb):
check = True
if alog_glb.MNGR is None:
check = False
if alog_glb.APL is None:
check = False
if len(alog_glb.APL) < 1:
check = False
if check:
APL_ITM_DELET(alog_glb.APL, alog_glb.APL[-1])


def APL_INIT(alog_glb):
print("PROCESS_ALOG_20210726_0110 - APL_INIT(alog_glb)")
if alog_glb.MNGR is None:
alog_glb.MNGR = Manager()
print("PROCESS_ALOG_20210726_0110 - APL_INIT(alog_glb) - alog_glb.MNGR wurde initialisiert.")
if alog_glb.APL is None:
alog_glb.APL = alog_glb.MNGR.list()
print("PROCESS_ALOG_20210726_0110 - APL_INIT(alog_glb) - alog_glb.APL wurde initialisiert.")


def APL_DESTROY(alog_glb):
print("PROCESS_ALOG_20210726_0110 - APL_DESTROY(alog_glb)")
if alog_glb.MNGR is not None:
alog_glb.MNGR.shutdown()
alog_glb.MNGR = None
print("PROCESS_ALOG_20210726_0110 - APL_DESTROY(alog_glb) - alog_glb.MNGR wurde eliminiert.")
if alog_glb.APL is not None:
alog_glb.APL = None
print("PROCESS_ALOG_20210726_0110 - APL_DESTROY(alog_glb) - alog_glb.APL wurde eliminiert.")


def APL_ITM_ADD(apl, pid):
apl.append(pid)


def APL_ITM_DELET(apl, pid):
apl.remove(pid)


def RPRCSL_INIT(alog_glb):
print("PROCESS_ALOG_20210726_0110 - RPRCSL_INIT(alog_glb)")
if alog_glb.MNGR is None:
alog_glb.MNGR = Manager()
print("PROCESS_ALOG_20210726_0110 - RPRCSL_INIT(alog_glb) - alog_glb.MNGR wurde initialisiert.")
if alog_glb.RPRCSL is None:
alog_glb.RPRCSL = alog_glb.MNGR.dict()
print("PROCESS_ALOG_20210726_0110 - RPRCSL_INIT(alog_glb) - alog_glb.RPRCSL wurde initialisiert.")

def RPRCSL_DESTROY(alog_glb):
print("PROCESS_ALOG_20210726_0110 - RPRCSL_DESTROY(alog_glb)")
if alog_glb.MNGR is not None:
alog_glb.MNGR.shutdown()
alog_glb.MNGR = None
print("PROCESS_ALOG_20210726_0110 - RPRCSL_DESTROY(alog_glb) - alog_glb.MNGR wurde eliminiert.")
if alog_glb.RPRCSL is None:
alog_glb.RPRCSL = None
print("PROCESS_ALOG_20210726_0110 - RPRCSL_DESTROY(alog_glb) - alog_glb.RPRCSL wurde eliminiert.")

def RPRCSL_ADD(rprcsl, pid):
print("RPRCSL_ADD(rprcsl, pid) -> wird ausgeführt.")
print(f"RPRCSL_ADD(rprcsl, pid) -> pid: {pid}")
print(f"RPRCSL_ADD(rprcsl, pid) -> rprcsl: {rprcsl}")
p = psutil.Process(pid)
p_dict = dict()
p_name = None
with p.oneshot():
p_dict["name"] = p.name()
p_dict["pid"] = p.pid
p_dict["ppid"] = p.ppid()
p_dict["status"] = p.status()
p_dict["create_time_0"] = p.create_time()
p_dict["create_time_1"] = datetime.datetime.fromtimestamp(p_dict["create_time_0"]).strftime("%Y-%m-%d %H:%M:%S")
p_dict["closed_time_0"] = None
p_dict["closed_time_1"] = None
rprcsl[pid] = p_dict

print("RPRCSL_ADD(rprcsl, pid) -> Processinformationen wurden zu RPRCSL-Liste hinzugefügt.")

def RPRCSL_COPY(rprcsl, pid):
p_dict = dict()
p_dict["name"] = rprcsl[pid]["name"]
p_dict["pid"] = rprcsl[pid]["pid"]
p_dict["ppid"] = rprcsl[pid]["ppid"]
p_dict["status"] = rprcsl[pid]["status"]
p_dict["create_time_0"] = rprcsl[pid]["create_time_0"]
p_dict["create_time_1"] = rprcsl[pid]["create_time_1"]
p_dict["closed_time_0"] = rprcsl[pid]["closed_time_0"]
p_dict["closed_time_1"] = rprcsl[pid]["closed_time_1"]

return p_dict


def RPRCSL_EVNT_CLOSE(rprcsl, pid, pid_copy):
print(f"RPRCSL_EVNT_CLOSE -> rprcsl: {rprcsl}")
print(f"RPRCSL_EVNT_CLOSE -> pid: {pid}")
print(f"RPRCSL_EVNT_CLOSE -> pid_copy: {pid_copy}")
print(f"RPRCSL_EVNT_CLOSE -> Initialisiere [closed_time_0] in pid_copy")
pid_copy["closed_time_0"] = time.time()
pid_copy["closed_time_1"] = datetime.datetime.fromtimestamp(pid_copy["closed_time_0"]).strftime("%Y-%m-%d %H:%M:%S")
print(f"RPRCSL_EVNT_CLOSE -> Initialisierung erfolgreich durchgeführt [closed_time_0]")
print(f"RPRCSL_EVNT_CLOSE -> Kopiere pid_copy in rprcsl")
print(f"RPRCSL_EVNT_CLOSE -> pid_copy:{pid_copy}")
rprcsl[pid] = pid_copy
print(f"RPRCSL_EVNT_CLOSE -> Kopiervorgang durchgeführt pid_copy in rprcsl")
print(f"RPRCSL_EVNT_CLOSE -> Gebe RPRCSL aus.")
print(f"RPRCSL_EVNT_CLOSE -> rprcsl[pid]: {rprcsl[pid]}")

#rprcsl[pid]["closed_time_1"] = datetime.datetime.fromtimestamp(rprcsl[pid]["closed_time_0"]).strftime("%Y-%m-%d %H:%M:%S")


Ausgabe:
mki_bscl_1_20210819 - BSC_CNTRL_START_A_RECORD

PROCESS_ALOG_20210726_0110 - START_PROCESS()
PROCESS_ALOG_20210726_0110 - APL_INIT(alog_glb)
PROCESS_ALOG_20210726_0110 - RPRCSL_INIT(alog_glb)
PROCESS_ALOG_20210726_0110 - RPRCSL_INIT(alog_glb) - alog_glb.RPRCSL wurde initialisiert.
START_PROCESS ->[0] Process wird initialisiert.
START_PROCESS ->[0] Process wurde erfolgreich initialisiert.
START_PROCESS ->[1] Process wird gestartet.
START_PROCESS ->[1] Process wurde erfolgreich gestartet.ALOG_20210722.GLOBALS_20210720_1330 - GLOBALS_20210720_1330

START_PROCESS ->[2] p.join() wird ausgeführt
name:MKI_20210819.MKI_MAIN_20210819 MKI_MAIN_20210819
ALOG -> Prozess ist gestartet.
ALOG -> pid wird ermittelt.
ALOG -> pid[17476] wurde ermittelt.
ALOG -> RPRCSL-Eintrag wird vorbereitet.
RPRCSL_ADD(rprcsl, pid) -> wird ausgeführt.
RPRCSL_ADD(rprcsl, pid) -> pid: 17476
RPRCSL_ADD(rprcsl, pid) -> rprcsl: {}
RPRCSL_ADD(rprcsl, pid) -> Processinformationen wurden zu RPRCSL-Liste hinzugefügt.
ALOG -> RPRCSL pid[17476] wurde registriert.
ALOG -> RPRCSL: {
17476: {
'name': 'python.exe', 
'pid': 17476, 
'ppid': 11288, 
'status': 'running', 
'create_time_0': 1632466689.9421966, 
'create_time_1': '2021-09-24 08:58:09', 
'closed_time_0': None, 
'closed_time_1': None
}
}
ALOG -> WARTE-DUMMY wird gestartet.
ALOG -> WARTE-DUMMY wurde beendet.
ALOG -> Erstelle eine [pid_copy] Kopie
RPRCSL_EVNT_CLOSE -> rprcsl: {
17476: {
'name': 'python.exe', 
'pid': 17476, 
'ppid': 11288, 
'status': 'running', 
'create_time_0': 1632466689.9421966, 
'create_time_1': '2021-09-24 08:58:09', 
'closed_time_0': None, 
'closed_time_1': None
}
}
RPRCSL_EVNT_CLOSE -> pid: 17476
RPRCSL_EVNT_CLOSE -> pid_copy: {
'name': 'python.exe', 
'pid': 17476, 
'ppid': 11288, 
'status': 'running', 
'create_time_0': 1632466689.9421966, 
'create_time_1': '2021-09-24 08:58:09', 
'closed_time_0': None, 
'closed_time_1': None
}
RPRCSL_EVNT_CLOSE -> Initialisiere [closed_time_0] in pid_copy
RPRCSL_EVNT_CLOSE -> Initialisierung erfolgreich durchgeführt [closed_time_0]
RPRCSL_EVNT_CLOSE -> Kopiere pid_copy in rprcsl
RPRCSL_EVNT_CLOSE -> pid_copy:{
'name': 'python.exe', 
'pid': 17476, 
'ppid': 11288, 
'status': 'running', 
'create_time_0': 1632466689.9421966, 
'create_time_1': '2021-09-24 08:58:09', 
'closed_time_0': 1632466690.0648744, 
'closed_time_1': '2021-09-24 08:58:10'
}
RPRCSL_EVNT_CLOSE -> Kopiervorgang durchgeführt pid_copy in rprcsl
RPRCSL_EVNT_CLOSE -> Gebe RPRCSL aus.
RPRCSL_EVNT_CLOSE -> rprcsl[pid]: {
'name': 'python.exe', 
'pid': 17476, 
'ppid': 11288, 
'status': 'running', 
'create_time_0': 1632466689.9421966, 
'create_time_1': '2021-09-24 08:58:09', 
'closed_time_0': 1632466690.0648744, 
'closed_time_1': '2021-09-24 08:58:10'
}
ALOG -> RPRCSL: {
17476: {
'name': 'python.exe', 
'pid': 17476, 
'ppid': 11288, 
'status': 'running', 
'create_time_0': 1632466689.9421966, 
'create_time_1': '2021-09-24 08:58:09', 
'closed_time_0': 1632466690.0648744, 
'closed_time_1': '2021-09-24 08:58:10'
}
}
START_PROCESS ->[2] p.join() wurde durchgeführt
START_PROCESS -> alog_glb.RPRCSL: {
17476: {
'name': 'python.exe', 
'pid': 17476, 
'ppid': 11288, 
'status': 'running', 
'create_time_0': 1632466689.9421966, 
'create_time_1': '2021-09-24 08:58:09', 
'closed_time_0': 1632466690.0648744, 
'closed_time_1': '2021-09-24 08:58:10'
}
}
mki_bscl_1_20210819 - BSC_CNTRL_START_A_RECORD - []



Weil es technisch in Python nicht möglich ist auf einzelne Items zuzugreifen, war es notwendig eine Methode zu entwickeln, die ein neues Dictionary erstellt, die Daten aus dem [Manager]-Modul in dieses Dictionary kopiert und als Rückgabewert zurückgibt.

Diese Dictionary-Kopie kann bearbeitet werden.

def RPRCSL_COPY(rprcsl, pid):
p_dict = dict()
p_dict["name"] = rprcsl[pid]["name"]
p_dict["pid"] = rprcsl[pid]["pid"]
p_dict["ppid"] = rprcsl[pid]["ppid"]
p_dict["status"] = rprcsl[pid]["status"]
p_dict["create_time_0"] = rprcsl[pid]["create_time_0"]
p_dict["create_time_1"] = rprcsl[pid]["create_time_1"]
p_dict["closed_time_0"] = rprcsl[pid]["closed_time_0"]
p_dict["closed_time_1"] = rprcsl[pid]["closed_time_1"]

return p_dict
def RPRCSL_EVNT_CLOSE(rprcsl, pid, pid_copy):
print(f"RPRCSL_EVNT_CLOSE -> rprcsl: {rprcsl}")
print(f"RPRCSL_EVNT_CLOSE -> pid: {pid}")
print(f"RPRCSL_EVNT_CLOSE -> pid_copy: {pid_copy}")
print(f"RPRCSL_EVNT_CLOSE -> Initialisiere [closed_time_0] in pid_copy")
pid_copy["closed_time_0"] = time.time()
pid_copy["closed_time_1"] = datetime.datetime.fromtimestamp(pid_copy["closed_time_0"]).strftime("%Y-%m-%d %H:%M:%S")
print(f"RPRCSL_EVNT_CLOSE -> Initialisierung erfolgreich durchgeführt [closed_time_0]")
print(f"RPRCSL_EVNT_CLOSE -> Kopiere pid_copy in rprcsl")
print(f"RPRCSL_EVNT_CLOSE -> pid_copy:{pid_copy}")
rprcsl[pid] = pid_copy
print(f"RPRCSL_EVNT_CLOSE -> Kopiervorgang durchgeführt pid_copy in rprcsl")
print(f"RPRCSL_EVNT_CLOSE -> Gebe RPRCSL aus.")
print(f"RPRCSL_EVNT_CLOSE -> rprcsl[pid]: {rprcsl[pid]}")
RPRCSL_EVNT_CLOSE(rprcsl, pid, RPRCSL_COPY(rprcsl, pid))

Somit wird der Zeitpunkt wo der Prozess geschlossen wird erst in die Kopie geschrieben. Danach wird die Dictionary-Kopie an das [Manager]-Modul übergeben und im Gemeinsamen Speicher für alle Prozesse zugänglich gemacht.


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