Ergebnis 1 bis 15 von 301

Thema: multimon (der Vorgänger des monitord) auf Raspberry Pi

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Registriert seit
    03.03.2015
    Beiträge
    45
    Wollt Ihr wirklich den Aufwand treiben und das so generisch bauen?

    In Funktionen/Module auslagern ist das eine, das ganze auch noch generisch....
    Da muss man dann Helfermethoden haben...

    Ich glaube bei Bedarf den if-Zweif in der Hauptdatei zu erweitern ist da einfacher.
    Muss sich dann aber auf wenig Code beschränken:
    Code:
    if useMethode: #hier evtl. sogar den get.config-Aufruf, wenn einmalig
       doMethode(typ, id, sub, msg)
    Geändert von JHC (18.05.2015 um 08:10 Uhr)

  2. #2
    Registriert seit
    18.03.2015
    Beiträge
    67
    steh ich auf dem Schlauch, oder liese sich das ganz simpelst so umsetzen?
    https://lkubuntu.wordpress.com/2012/...on-plugin-api/

    Und im Prinzip immer an die run() Funktion den definierten Satz an Argumenten übergeben...

  3. #3
    Registriert seit
    03.03.2015
    Beiträge
    45
    Ja,klingt so...

    Das Programm führt aber immer alle Plugins aus.
    Eine Konfigurationsmöglichkeit müsste man noch einbauen.

  4. #4
    Registriert seit
    18.03.2015
    Beiträge
    67
    Zitat Zitat von JHC Beitrag anzeigen
    Ja,klingt so...

    Das Programm führt aber immer alle Plugins aus.
    Eine Konfigurationsmöglichkeit müsste man noch einbauen.
    Für die config der einzelnen Plugins kann man das dann auch fest in die Python Datei am Anfang als constanten einbauen. Da sollte man den Aufwand eines Config Parsers evtl vermeiden. Keep it simple ;-) Und da kann man ja dann auch angeben, ob das Modul überhaupt aktiv sein soll. Das bisschen Rechenaufwand zum "sinnlosen" Einbinden des Moduls sollte kein Problem sein.

    Oder man legt nur die config sowie andere Initialisierungen in die __init__.py und macht dann für den eigentlichen Modul Code eine Datei die importiert wird. Man muss die Einstigesdatei ja nicht zwingend __init__.py nennen - siehe pluginloader.py da kann mans ja angeben

    Schaut mal in den Dev-Branch / plugin_test
    pluginloader.py enthält die Funktionen zum load/reload der Plugins
    und die plugin_test.py ruft jede sekunde die Plugins auf.

    das schöne an imp.load_module ist, dass schon geladene Module einfach nur neu geladen werden. Also äquivalent zu reload(). man könnte die Plugins also während Boswatch läuft verändern. Die werden bei jedem Aufruf sowieso nachgeladen :-)
    Geändert von Schrolli (18.05.2015 um 09:15 Uhr)

  5. #5
    Registriert seit
    03.03.2015
    Beiträge
    45
    Zitat Zitat von Schrolli Beitrag anzeigen
    das schöne an imp.load_module ist, dass schon geladene Module einfach nur neu geladen werden. Also äquivalent zu reload(). man könnte die Plugins also während Boswatch läuft verändern. Die werden bei jedem Aufruf sowieso nachgeladen :-)
    Das ist für die Entwicklung ganz nett, für eine produktive Umgebung würde ich load_once bevorzugen... ;-)

  6. #6
    Registriert seit
    18.03.2015
    Beiträge
    67
    Zitat Zitat von JHC Beitrag anzeigen
    Das ist für die Entwicklung ganz nett, für eine produktive Umgebung würde ich load_once bevorzugen... ;-)
    Das sind aber meiner Meinung nach alles Dinge, die man im Nachhinein ändern kann. Mit der prinzipiellen Funktion eines Plugin Systems hats ja nix zu tun. Ob ich die Module nun EINMALIG lade oder öfters. Würde erst mal priorisieren das so umzusetzen, dass der Code ausgelagert ist, und es funktioniert.

    Dann kann man über den "produktiv" Feinschliff nachdenken, oder hast du da eine andere Meinung?

    Gruß

  7. #7
    Registriert seit
    03.03.2015
    Beiträge
    45
    Nein, ich hätte ja noch kleiner mit Funktionen angefangen, bevor ich die Funktionen in Module ausgelagert hätte. Deswegen habe ich nichts gegen schrittweise Vorgehen.

    config.ini
    Code:
    useMySQL = 1
    Pflicht für Plugin-Name: MySQL

    Plugins ausführen:
    Code:
    for i in pluginloader.getPlugins():
            if int(config.get("Modules", "use"+i["name"]))
               print("Loading plugin " + i["name"])
               plugin = pluginloader.loadPlugin(i)
               plugin.run()
    Edit: Fehler im Code bereinigt

    Wäre die minimale Anpassung config.ini um eine neue Zeile ergänzen.
    Geändert von JHC (18.05.2015 um 09:40 Uhr)

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •