[ 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")
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.
Artem Kraft
Kommentare
Kommentar veröffentlichen