Idiomatisches asynchrones Design

8

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:

  1. Lassen Sie Daten an sie senden, sobald sie verfügbar sind
  2. Überprüfen Sie den Status des asynchronen Vorgangs
  3. Über auftretende Fehler informiert werden
  4. Warten auf den Abschluss (Konvertieren der asynchronen Operation in eine synchrone Operation)

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.

    
Matt Green 18.12.2008, 17:27
quelle

3 Antworten

2

Sehen Sie sich auch die Asynchronous Completion Token- und ActiveObject-Muster an.

    
Charlie Martin 18.12.2008, 19:02
quelle
4

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.

    
grepsedawk 18.12.2008 17:43
quelle
2

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%     
S.Lott 18.12.2008 22:22
quelle

Tags und Links