[ TAG 292 ][07.01.2022] -Erfolgreich -IAP-20210601-20210722 -RPRCSL_20220207_0240
Bei der heutigen Worksession möchte ich die [RPRCSL] überarbeiten. Dabei möchte ich die Ausführung der ALOG-Prozesse überdenken und überarbeiten.
Die PID als Index für die RPRCSL zu benutzen erwies sich als sehr problematisch und stellte mich vor vielen Einschränkungen.
Für die neue [RPRCSL]-Liste werde ich einen numerischen Index verwenden. Bei der neuen [RPRCSL]-Liste verzichte ich auf das Manager-Modul von Python. Während der Entwicklungsarbeiten bemerkte ich, dass die Verwendung des Manager-Modul von Python sehr große Nachteile hat. Besonders in Bezug auf die Performance und den flüssigen Ablauf des Programms.
Ich habe folgende Veränderungen an folgenden Modulen vorgenommen.
- main.py
- PROCESS_ALOG_20210726.py
- RPRCSL_20220207_0240.py (neu)
[main.py]
from ALOG_20210722 import GLOBALS_20210720_1330 as alog_glb
from ALOG_20210722 import PROCESS_ALOG_20210726_0110 as alog
from ALOG_20210722 import RPRCSL_20220207_0240 as rprcsl
from MKI_20210819 import GLOBALS_20210819 as mki_glb
from MKI_20210819 import MKI_MAIN_20210819 as mki_main
from MKI_20210819 import MKI_BSCL_0_20210819 as mki_bscl_0
from MKI_20210819 import MKI_BSCL_1_20210819 as mki_bscl_1
import os
def MKI():
shm_mki0 = mki_glb.SHM_MKI0_CREATE(0)
mki_main.shm_mki0 = shm_mki0
mki_bscl_0.mki_main = mki_main
mki_bscl_0.shm_mki0 = shm_mki0
mki_bscl_0.BSCL_EXIT_EXEC_LIST.append(EXIT)
mki_bscl_1.mki_main = mki_main
mki_bscl_1.shm_mki0 = shm_mki0
mki_bscl_1.alog = alog
mki_bscl_1.alog_glb = alog_glb
mki_main.INIT_KEYLISTENER(mki_bscl_0, mki_bscl_1)
mki_glb.SHM_MKI0_DESTROY(shm_mki0)# hier wird SHM wieder geschlossen, DUMMY.
def EXIT():
'''
Die EXIT-Methode wird als Garbage-Collector benutzt.
Die Methode überprüft und löscht alle Speicher-Module.
'''
print("main.py - EXIT()")
rprcsl.RPRCSL_DESTROY(alog_glb=alog_glb)
def RPRCSL():
print("main.py - ALOG()")
rprcsl.RPRCSL_INIT(alog_glb=alog_glb)
if __name__ == '__main__':
RPRCSL()
MKI()
[PROCESS_ALOG_20210726_0110.py]
import multiprocessing
from multiprocessing import Process
from ALOG_20210722 import RPRCSL_20220207_0240
from STRUCT import PRTKL_202112082120 as prtkl_202112082120
from ALOG_20210722 import RPRCSL_LOGGER_20210929 as rprcsl_log
from ALOG_20210722 import GLOBALS_20210720_1330
import time
# ----------------------------------------------------------------------
# PROCESS_ALOG_20210726_0110.py
# IAP-20210601-20210722-1145 > ALOG_20210722 > PROCESS_ALOG_20210726_0110.py
# PROZESS-MODUL für Audiologs
# ----------------------------------------------------------------------
def GENERATE_KWARGS_LIST(kwargs_items):
lst = {}
for key, value in kwargs_items:
lst.update({key: value})
return lst
def ALOG(**kwargs):
klst = GENERATE_KWARGS_LIST(kwargs_items=kwargs.items())
pid = multiprocessing.process.current_process().pid
pname = multiprocessing.process.current_process().name
shm_alog = GLOBALS_20210720_1330.SHM_ALOG_CONNECT(klst["shm_alg_id"])
print("")
print(f"klst: {klst}")
print(f"pid: {pid}")
print(f"pname: {pname}")
print(f"klst['shm_alg_id']: {klst['shm_alg_id']}")
print(f"shm_alog: {shm_alog}")
GLOBALS_20210720_1330.SHM_ALOG_DISCONNECT(shm_alog)
def GENERATE_KWARGS(alog_glb, p11_spi, shm_alg_id):
logger_str_idnt = alog_glb.ALOG_STORAGE_IDENTIFIER
logger_prj_idnt = alog_glb.LOGGER_IDENTIFIER
logger_p11_spi = p11_spi
logger_prtkl = prtkl_202112082120.ini(str_idnt=logger_str_idnt,
prj_idnt=logger_prj_idnt,
p11_spi=logger_p11_spi)
alog_str_idnt = alog_glb.ALOG_STORAGE_IDENTIFIER
alog_prj_idnt = alog_glb.ALOG_IDENTIFIER
alog_p11_spi = p11_spi
alog_prtkl = prtkl_202112082120.ini(str_idnt=alog_str_idnt,
prj_idnt=alog_prj_idnt,
p11_spi=alog_p11_spi)
kwargs = {'lg0_idnt': logger_prtkl['idnt'],
'lg0_pth': f"{logger_prtkl['pth'].resolve()}",
'lg0_str_idnt': logger_str_idnt,
'lg0_prj_idnt': logger_prj_idnt,
'lg0_p11_spi': logger_p11_spi,
'alg_idnt': alog_prtkl['idnt'],
'alg_pth': f"{alog_prtkl['pth'].resolve()}",
'alg_str_idnt': alog_str_idnt,
'alg_prj_idnt': alog_prj_idnt,
'alg_p11_spi': alog_p11_spi,
'shm_alg_id': shm_alg_id
}
return kwargs
def START_PROCESS(alog_glb):
print(f"START_PROCESS -> START_PROCESS(alog_glb) wird ausgeführt.")
RPRCSL_20220207_0240.RPRCSL_NEW_ITEM(alog_glb=alog_glb)
shm_id = RPRCSL_20220207_0240.RPRCSL_LINDX(alog_glb=alog_glb)
shm_alog = GLOBALS_20210720_1330.SHM_ALOG_CREATE(shm_id)
RPRCSL_20220207_0240.RPRCSL_UPDATE_LITEM(alog_glb=alog_glb, shm_ref=shm_alog, shm_id=shm_id)
kwargs = GENERATE_KWARGS(alog_glb=alog_glb, p11_spi="DEON", shm_alg_id=shm_id)
p = Process(target=ALOG, kwargs=kwargs)
p.start()
pid = p.pid
ppid = multiprocessing.process.current_process().pid
RPRCSL_20220207_0240.RPRCSL_UPDATE_LITEM(alog_glb=alog_glb, pid=pid, ppid=ppid)
p.join()
GLOBALS_20210720_1330.SHM_ALOG_DESTROY(shm_alog)
print(f"alog_glb.RPRCSL: {alog_glb.RPRCSL}")
def STOP_LAST_PROCESS(alog_glb):
print("STOP_LAST_PROCESS")
[RPRCSL_20220207_0240.py]
import datetime
import time
# -------------------------------------------------------
# RPRCSL
# -------------------------------------------------------
def RPRCSL_INIT(alog_glb):
if alog_glb.RPRCSL is None:
alog_glb.RPRCSL = list()
def RPRCSL_DESTROY(alog_glb):
if alog_glb.RPRCSL is not None:
alog_glb.RPRCSL = None
def RPRCSL_LENGTH(alog_glb):
if alog_glb.RPRCSL is not None:
return len(alog_glb.RPRCSL)
else:
return False
def RPRCSL_LINDX(alog_glb):
if alog_glb.RPRCSL is not None:
lngt = len(alog_glb.RPRCSL)
if lngt > 0:
return lngt-1
else:
return lngt
else:
return False
def RPRCSL_NEW_ITEM(alog_glb, pid=None, ppid=None, shm_ref=None, shm_id=None):
itm = dict(pid=pid, ppid=ppid, shm_ref=shm_ref, shm_id=shm_id)
alog_glb.RPRCSL.append(itm)
def RPRCSL_UPDATE_LITEM(alog_glb, pid=None, ppid=None, shm_ref=None, shm_id=None):
print("")
print("RPRCSL_UPDATE_LITEM")
print(f"alog_glb.RPRCSL: {alog_glb.RPRCSL[-1]}")
print("")
if pid is not None:
alog_glb.RPRCSL[-1]["pid"] = pid
if ppid is not None:
alog_glb.RPRCSL[-1]["ppid"] = ppid
if shm_ref is not None:
alog_glb.RPRCSL[-1]["shm_ref"] = shm_ref
if shm_id is not None:
alog_glb.RPRCSL[-1]["shm_id"] = shm_id
def RPRCSL_REMOVE_LAST_ITEM(alog_glb):
alog_glb.RPRCSL.pop()
Ausgabe:
C:\Python\Python39\envs\IAP-20210601-20210722-1145\python.exe E:/2021/Projekte/Python/2021/06_jun/IAP-20210601-20210722-1145/main.py
ALOG_20210722.GLOBALS_20210720_1330 - GLOBALS_20210720_1330
name:MKI_20210819.MKI_MAIN_20210819 MKI_MAIN_20210819
main.py - ALOG()
t1:1644203149.1120818 t2:1644203149.3195267 tdif:0.2074449062347412 tintv:1.5
DUMMY_INIT_EXEC_1
DUMMY_INIT_EXEC_1 - Prüfe FLAG-1
DUMMY_INIT_EXEC_2
mki_bscl_1_20210819 - BSC_CNTRL_START_A_RECORD
START_PROCESS -> START_PROCESS(alog_glb) wird ausgeführt.
RPRCSL_UPDATE_LITEM
alog_glb.RPRCSL: {'pid': None, 'ppid': None, 'shm_ref': None, 'shm_id': None}
PRJ_IDNT
b1: True
b2: None
pth: E:\LOGGER
[ E:\LOGGER\2022\02\07 ] der Pfad existiert.
PRJ_IDNT
b1: True
b2: None
pth: E:\ALOG
[ E:\ALOG\2022\02\07 ] der Pfad existiert.
RPRCSL_UPDATE_LITEM
alog_glb.RPRCSL: {'pid': None, 'ppid': None, 'shm_ref': SharedMemory('SHMM-ALOG-190821-0', size=8), 'shm_id': 0}
ALOG_20210722.GLOBALS_20210720_1330 - GLOBALS_20210720_1330
name:MKI_20210819.MKI_MAIN_20210819 MKI_MAIN_20210819
klst: {'lg0_idnt': 'DEON_20220207_0405-0', 'lg0_pth': 'E:\\LOGGER\\2022\\02\\07\\DEON_20220207_0405-0', 'lg0_str_idnt': 'ext_prj_2021', 'lg0_prj_idnt': 'LOGGER', 'lg0_p11_spi': 'DEON', 'alg_idnt': 'DEON_20220207_0405-0', 'alg_pth': 'E:\\ALOG\\2022\\02\\07\\DEON_20220207_0405-0', 'alg_str_idnt': 'ext_prj_2021', 'alg_prj_idnt': 'ALOG', 'alg_p11_spi': 'DEON', 'shm_alg_id': 0}
pid: 5140
pname: Process-1
klst['shm_alg_id']: 0
shm_alog: SharedMemory('SHMM-ALOG-190821-0', size=4096)
alog_glb.RPRCSL: [{'pid': 5140, 'ppid': 18916, 'shm_ref': SharedMemory('SHMM-ALOG-190821-0', size=8), 'shm_id': 0}]
bsc_key_listener.stop()
bsc_key_listener.join() fehlgeschlagen
DUMMY_EXIT_EXEC_1
DUMMY_EXIT_EXEC_2
main.py - EXIT()
Exit - INIT_KEYLISTENER
Process finished with exit code 0
---------------------------------------------------------------
Ich habe eine Auffälligkeit entdeckt. Normalerweise sollte das SHM-MODUL nur 8 Byte groß sein. Jedoch zeigt mir die Ausgabe, dass im ALOG-Prozess das SHM-MODUL 4096 Bytes besitzt.
Diese Unstimmigkeit werde ich noch überprüfen müssen. Zu diesen Zeitpunkt weiß ich noch nicht wie sowas entstehen konnte oder was es zu bedeuten hat.
Hochachtungsvoll
Artem Kraft
Kommentare
Kommentar veröffentlichen