Ich glauebe, es wäre ganz hilfreich deinen ganzen Code zu sehen. Grundsätzlich gilt, dass jedes insert in eine Datenbank eine Transaktion öffnet, die am Ende mit einem "commit" fest in die Datenbank geschrieben werden muss. "commit" ist recht teuer. Wenn man recht viele Daten auf einmal einfügen möche, ist es also sinnvoll das zu bünden, bevor man commit aufruft. Dazu kommt, dass sqlite3 - wenn ich mich richtig erinnere - mit autocommit läuft, wenn man kein isolation_level angibt. Dann wird sowieso für jedes Statement ein commit ausgeführt, was ebenfalls alng dauert.
Wenn du deine Datenbank so angepasst hast, dass alles in einer tabelle steht, kannst du recht viele gleichlautende Daten mit "executemany" einfügen, da das Statement gleich bleibt und nur die Values sich ändern.
Das dürfte dann deutlich flotter werden.
Abfrage an einen OPCUA Server
Hallo sparrow,
der ganze Code umfasst in etwa 1800 Zeilen.
Ich werde die Datenbank heute zusammenführen. Mit dem "executemany" füge ich schon alle Daten eines Sensors mit einem mal in die Datenbank ein. Nur das ich das für die 60 Sekunden mit einem mal schaffe, daran beiße ich mir die Zähne aus. Da wäre ich für einen Tipp dankbar.
der ganze Code umfasst in etwa 1800 Zeilen.
Ich werde die Datenbank heute zusammenführen. Mit dem "executemany" füge ich schon alle Daten eines Sensors mit einem mal in die Datenbank ein. Nur das ich das für die 60 Sekunden mit einem mal schaffe, daran beiße ich mir die Zähne aus. Da wäre ich für einen Tipp dankbar.
@Knausbär: bei Deinem letzten Code benutzt Du noch `executemany` falsch, also wäre es gut, wenn Du Deinen aktuell benutzen Code hier posten würdest. Und wenn Du all das, was Dir hier als Tipps gegeben wurde, umgesetzt hast, sind es dann immer noch 1800 Zeilen Code?
- DeaD_EyE
- User
- Beiträge: 1020
- Registriert: Sonntag 19. September 2010, 13:45
- Wohnort: Hagen
- Kontaktdaten:
Nein, es seiden Python schafft es nicht alle 100 ms irgendwas zu machen.
Die Samplerate beträgt bei den normalen Modellen 100 ms und die kostspieligen können sogar 10 ms.
Auch das ist kein Problem für Python, es seiden man macht die Aufrufe zu komplex, dass sie länger als 100 ms brauchen.
Generell würde ich die Pfade zusammenfassen, um Copy&Pase-Fehler zu verhindern.
Man kann auch Listen mit einzelnen str nutzen, um die Symbole zu addressieren.
Ein weiter Vorteil ist es, wenn man bei der SPS eine OPC-UA-Spezifikation anlegt und anstatt auf die Standard-Stimatic-Schnitstelle, auf seine eigene zugreift.
Ich glaube das geht aber erst seit Tia Portal v15. Aktuell ist V17. Mit den verdammten Installationen komme ich gar nicht mehr nach.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server