Wenn dies dein erster Besuch hier ist, lies bitte zuerst die Hilfe - Häufig gestellte Fragen durch. Du musst dich vermutlich registrieren, bevor du Beiträge verfassen kannst. Klicke oben auf 'Registrieren', um den Registrierungsprozess zu starten. Du kannst auch jetzt schon Beiträge lesen. Suche dir einfach das Forum aus, das dich am meisten interessiert.
Ich geb euch dann das Plugin, dann könnt Ihr das anpassen .
In der Zeit bis ich den Kram verstanden habe, hab ich das dreimal getippt. Und beim Staubsauger ist mir das auch egal ob er nun 0.5 Sekunden delay hat .
Wenn alles fertig ist sehe ich mir das sicherlich noch mal an, ob ich das aber 2 Monate noch/wieder verstehe wage ich zu bezweifeln.
Kleine Perfomance-Randnotitz:
struct ist schneller, zumindest bei Py3.2. Habe ich mal für das KNX-Plugin gemessen.
Bis bald
Marcus
Wenn wir jetzt über Zeit, und nicht über Les- und Wartbarkeit sinnieren: struct ist nur für Leute die zu viel Zeit haben:
Code:
root@server:~# python3 benchmark.py
benchmark: struct with new bytes took: 5.41s
benchmark: better struct took: 1.73s
benchmark: best struct took: 1.27s
benchmark: int took: 3.50s
benchmark: direct took: 0.75s
Code:
#!/usr/bin/env python3
# vim: set encoding=utf-8 tabstop=4 softtabstop=4 shiftwidth=4 expandtab
import time
from struct import *
def DecodeUnsignedShort(low, high):
bytearr = bytearray([high,low])
value = unpack('>H', bytearr)
#print (value[0])
return (value[0])
def DecodeUnsignedShort2(bytearr):
value = unpack('>H', bytearr)
#print (value[0])
return (value[0])
test = bytes(range(256))
for power in range(12):
test = test + test
start = time.time()
for idx in range(0,len(test),2):
value = DecodeUnsignedShort(test[idx+1], test[idx])
#print(value)
print("benchmark: struct with new bytes took: {:.2f}s".format(time.time() - start))
start = time.time()
for idx in range(0,len(test),2):
value = DecodeUnsignedShort2(test[idx:idx+2])
#print(value)
print("benchmark: better struct took: {:.2f}s".format(time.time() - start))
start = time.time()
for idx in range(0,len(test),2):
value = unpack('>H', test[idx:idx+2])
#print(value)
print("benchmark: best struct took: {:.2f}s".format(time.time() - start))
start = time.time()
for idx in range(0,len(test),2):
value = int.from_bytes(test[idx:idx+2], byteorder='little')
#print(value)
print("benchmark: int took: {:.2f}s".format(time.time() - start))
start = time.time()
for idx in range(0,len(test),2):
value = test[idx] << 8 | test[idx+1];
#print(value)
print("benchmark: direct took: {:.2f}s".format(time.time() - start))
Nö - da gibts du ihm einfach einen entsprechend größeren/kleineren Bereich!? Also x[4:9] für 32bit oder nur x[4] für 8bit. Und signed geht damit natürlich auch. Aber wenn du magst schreib halt mehr Code.
Nebenbei: https://github.com/mknx/smarthome/co...bae26d1d69dc04 - da habe ich mein Plugin aus genau! demselben Grund umgestellt. Man beachte die Commit-Nachricht. Es gibt einfach keinen Sinn sich mit unleserlichen Code selbst ins Bein zu schießen wenn es FERTIGE Funktionen genau dafür gibt...
nein aber ich brauch noch mehrere Datentypen, da ist es einfacher das Schema was ich als Vorlage nutze weiter zu verarbeiten, sonst geht die Fragerei bei unsigned long, unsigned byte etc. weiter .
danke für die Hilfe, den Fehler hatte ich mir gerade wieder selbst eingebaut.
Welches Format müssten denn low und high in diesem Fall haben? Vielleicht hilft mir das schon weiter.
Bei Bits und Bytes ist mein Abstraktionsgrad einfach am Ende. Ich arbeite zwar täglich mit Künstlern unterschiedlichster Genre aber die sind im Gegensatz zur IT wirklich bodenständig .
Ich will doch nix weiter als aus 10 und 109 einen Integer zwischen 0 – 65535, eigentlich sollte Python anhand dieser Randbedingungen arbeiten können ... also wenn ich mir was wünschen dürfte
Wir verarbeiten personenbezogene Daten über die Nutzer unserer Website mithilfe von Cookies und anderen Technologien, um unsere Dienste bereitzustellen. Weitere Informationen findest Du in unserer Datenschutzerklärung.
Indem Du unten auf "ICH stimme zu" klickst, stimmst Du unserer Datenschutzerklärung und unseren persönlichen Datenverarbeitungs- und Cookie-Praktiken zu, wie darin beschrieben. Du erkennst außerdem an, dass dieses Forum möglicherweise außerhalb Deines Landes gehostet wird und bist damit einverstanden, dass Deine Daten in dem Land, in dem dieses Forum gehostet wird, gesammelt, gespeichert und verarbeitet werden.
Einen Kommentar schreiben: