Ein Philosoph weiß viel. Er weiß bei Vielem, ob es richtig ist oder ob es falsch ist, denn er hat es erkannt. Und ob sonst noch etwas stimmt oder nicht, das weiß er nicht und läßt es dabei. Andere aber wollen sich mit derartigem Unwissen nicht abfinden und glauben dies oder jenes, weil vielleicht jemand, dem sie glauben, es gesagt oder geschrieben hat.
Vielleicht sind Viele hier im Forum nicht glücklich mit mir, dass sie mich nicht überzeugen oder belehren können. Aber ich erkenne es einfach nicht als wahr an, solange es nicht zweifelsfrei bewiesen ist.
Vielleicht halten mich Viele jetzt für stockkonservativ, weil ich alles bezweifle, aber richtig bezweifeln heißt doppelt bezweifen, nämlich, ob die eigenen Zweifel angebracht sind, und ob es nicht sein kann, dass das was Viele glauben, dass es falsch ist, nicht doch stimmen könnte.
Auf der einen Seite bezweifle ich alles und auf der anderen Seite halte ich auch alles für möglich und bin daher auch ungeheuer aufgeschlossen und offen für Neues.
Hat das jemand verstanden?
@pillmuncher, bitte entschuldige diesen kleinen Exkurs. Aber unsere Diskussion hat mir sehr viel gebracht. Denn ich hatte nun nachgedacht, ob es ein Eventbus ist oder ein Proxy.
Die Antwort ist, es ist ein Proxy, denn Eventbus ist nur eine Default-Einstellung. Mir ist nämlich in den Sinn gekommen, dass man etwa auch Nachrichten austauschen könnte mit anderen gleichzeitig laufenden Python Anwendungen auf dem selben Computer als auch völlig woanders. Serialisieren einer Message ist in Python ganz einfach. Eine serialisierte Message sieht man mit 'print' und bekommt man mit 'str' und die Rückverwandlung geschieht ganz einfach mit 'eval'. Daher ist das Senden von Nachrichten gar kein Problem.
Eine klitzekleine Änderung meines Proxies machte Nachrichtenaustausch mit anderen Threads möglich. Es war das packed Flag. Und eine weitere kleine Änderung macht auch Kommunikation über Netzwerke und dergleichen möglich. Dazu betrachten wir einmal folgende Zeilen aus der Methode 'work':
Code: Alles auswählen
for receive,packed in receivers:
if packed: receive((msgid,msgdata))
else: receive(msgdata)
Code: Alles auswählen
for receiver,packed in receivers:
if packed: self.transmit(receiver,(msgid,msgdata))
else: self.transmit(receiver,msgdata)
Code: Alles auswählen
def callback(self,receiver,message): receiver(message)
self.transmit = self.callback
Allerdings fehlt da noch etwas. Dieser Proxy würde nur Gleichartiges mit Gleichartigem verbinden. Wir brauchen aber noch die Umwandlung von Callbacks oder was auch immer in Transmissions und umgekehrt.
Das könnte man zwar mit einem weiteren Flag regeln, aber das erscheint mir zu wenig. Ich denke eher an an eine Umwandlung von Transmission Typ X in Transmission Typ Y.
Aber vielleicht ist das Callback Prinzip auch gar nicht verkehrt und wir brauchen evtl. nur noch einen zusätzlichen Parameter für die Registrierung?
Wenn wir bei der ursprünglichen Implementierung bleiben und das packed Flag modifizieren, könnte es vielleicht bereits die Lösung sein:
Code: Alles auswählen
for receive,packed in receivers:
if type(packed) is bool:
if packed: receive((msgid,msgdata))
else: receive(msgdata)
else: receive((packed,(msgid,msgdata)))
Sieht doch gut aus, oder?
Aber mit dieser Implementierung wäre es doch wohl wieder Eventbus Prinzip.