Gibt es irgendwelche nützliche Idiome, die ich verwenden kann, wenn ich eine API schreibe, die asynchron ist? Ich würde gerne etwas standardisieren, da ich scheinbar ein paar verschiedene Stile benutze. Es scheint schwierig zu sein, asynchronen Code einfach zu machen; Ich vermute, das liegt daran, dass asynchrone Operationen alles andere als sind.
Auf der grundlegendsten Ebene muss der Benutzer der API in der Lage sein:
Meine Klassen unterstützen mehrere asynchrone Operationen. Ich habe einige der Status / Fehler-Callbacks in der Klasse herum platziert, aber die Klasse wird mit einer Menge zufälliger Felder angeknackst und wird zu groß. Ich bin neugierig, ob jemand eine asynchrone API verwendet hat, die sie für gut organisiert hielten. Ich habe .NETs Begin / EndAsyncOperation + AsyncResult-Design sowie einige Java-Klassen (z. B. Future) betrachtet.
Dies wird in Python geschrieben, also bleibt es sehr flexibel. Es gibt einen Vorbehalt: Einige dieser asynchronen Vorgänge werden zu einem Remote-Computer gemarshallt und dort ausgeführt. Daher wird nicht jede Operation notwendigerweise in einem separaten Thread ausgeführt.
Sehen Sie sich auch die Asynchronous Completion Token- und ActiveObject-Muster an.
Vielleicht möchten Sie sich Python Twisted anschauen. Es ist eine nette Reactor -basierte API, die asynchrone Operationen. Proactor ist die gebräuchliche Bezeichnung für asynchrone Completion-Handler wie Frameworks.
Das klingt wie das Observer Designmuster. Link .
Ihr Clientobjekt ist ein Beobachter . Ihre API gehört zu einem Objekt, das Observable ist.
Jeder Client (im Java-Sprachgebrauch) implementiert die Observer -Schnittstelle. In Python geht es darum, dass jeder Client eine Reihe von Methoden anbietet, die Ihr Observable verwenden wird.
%Vor%Ihr Observable-Objekt hat eine Möglichkeit für Beobachter, sich zu registrieren und andere Dinge zu tun.
%Vor%Tags und Links python asynchronous design