In Akka Streams was Mat in Quelle [Out, Mat] oder Sink [In, Mat] darstellt. Wann wird es tatsächlich benutzt?Akka Streams: Was bedeutet Mat in Source [out, Mat]
Antwort
Der Typparameter repräsentiert den Typ des materialisierten Werts dieses Streams.
dass Denken Sie daran, in Akka Source
, Flow
, Sink
(na ja, alle Grafiken) sind nur Items herzustellen - sie tun keine Verarbeitung von selbst beschreiben sie nur, wie der Strom aufgebaut werden soll. Der Prozess der Umwandlung dieser Blaupausen in einen Arbeitsstrom mit Live-Daten wird als Materialisierung bezeichnet.
Die Kernmethode zum Materialisieren eines Streams heißt run()
, und es ist defined in der RunnableGraph
Klasse. Alle anderen Methoden zum Ausführen eines Streams (z. B. runWith
auf einem Sink
oder Source
) delegieren schließlich an diese Methode. Sie können sehen, dass diese Methode Mat
zurückgibt. Das heißt, einen Strom materialisieren ergibt einen materialisierten Wert.
Zum Beispiel gibt es eine Senke, die alle Werte in einem Stream in einem einzigen Wert kombiniert, es wird mit Sink.fold
konstruiert. Aber wie bekommen Sie diesen Wert? Da der Stream asynchron ausgeführt wird, wäre ein natürlicher Typ für diesen Wert Future[T]
, wobei T
der Typ des Falzakkumulators ist. Stellt sich heraus, Sink.fold
gibt Sink[In, Future[T]]
zurück, das heißt, dieser Future[T]
ist sein materialisierter Wert, daher erhalten Sie eine Instanz von Future[T]
, die Sie dann in Ihrem eigenen Code für die weitere Verarbeitung verwenden können: es wird mit einem Wert if abgeschlossen Der Stream wird ordnungsgemäß abgeschlossen und wird mit einem Fehler abgeschlossen, wenn der Stream mit einer Ausnahme beendet wurde.
Jeder Teil des Graphen, den Sie konstruieren, indem Sie Senken, Quellen und Flüsse (und andere Arten von Graphen) kombinieren, kann möglicherweise einen zugehörigen materialisierten Wert haben. Der materialisierte Wert Source.queue
ist beispielsweise eine Warteschlange, mit der Sie Elemente in den Stream schieben können, sobald sie materialisiert sind. Der materialisierte Wert Sink.actorSubscriber
ist ein ActorRef
, mit dem Sie mit dem Aktor interagieren können (der vom Materializer erstellt wird) der Strom wird materialisiert). Auf der anderen Seite gibt es Flow.map
, was ein Fluss ohne bedeutungsvollen materialisierten Wert ist (es gibt nichts, was Sie extern steuern können, wenn Sie nur eine reine Funktion auf einen Stream anwenden), daher ist sein materialisierter Wert NotUsed
, was im Wesentlichen Unit
ist.
Natürlich ist es möglich, dass verschiedene Teile des Stromes ihren eigenen materialisierten Wert enthalten. Zum Beispiel hindert Sie nichts daran, Source.queue
und Sink.fold
zu kombinieren. Aber RunnableGraph.run()
kann nur einen materialisierten Wert zurückgeben. Um dies zu überwinden, gibt es üblicherweise zwei Varianten der Kombinationsmethoden an s, Flow
s und anderen Graphen, die üblicherweise als method
und methodMat
, z. und toMat
. Die zweite Variante ermöglicht es Ihnen, zu wählen, wie materialisierte Werte der Streams kombiniert werden, die Sie verbinden. Zum Beispiel können Sie sie in ein Tupel setzen, um sie beide zu bekommen:
val (queue, future) = Source.queue[Int](10, OverflowStrategy.fail)
.map(x => x + 10)
.toMat(Sink.fold(0)(_ + _))(Keep.both)
.run()
Standardkombinationsverfahren (ohne Mat
Suffix) in der Regel wählen, entweder die linke oder die rechte Wert materialisiert, je nachdem, was die natürlichste wäre was man für diese besondere Art von Stream tun kann.Das Objekt Keep
enthält bequeme Methoden, die entweder linke, rechte oder beide Argumente zurückgeben, speziell für den Zweck, sie als letztes Argument für die Methoden *Mat
zu verwenden, aber nichts hindert Sie daran, Ihre eigene Kombinationsfunktion zu schreiben.
- 1. Was ist der Unterschied zwischen Mat :: Klon und Mat :: copyTo?
- 2. Konvertierung zwischen cv :: Mat und arma :: mat
- 3. Wie mat in Bitmap und Bitmap in Mat konvertieren?
- 4. Pool von Arbeitnehmern mit Akka Streams
- 5. Concatenate Mat in OpenCV
- 6. OpenCV Zugangselement von Mat
- 7. Eclipse: MAT Fehler
- 8. OpenCV Mat Bilddatenstruktur
- 9. OpenCV Mat Bearbeitungszeit
- 10. BebopVideoView zu Mat
- 11. OpenCV Mat Korruption
- 12. Von IPLImage zu Mat
- 13. OpenCV C++ Mat MADNESS
- 14. Mat to unsigned char *
- 15. erkennen Speicherverlust von MAT
- 16. OpenCV Mat :: one-Funktion
- 17. Schlechte Adresse in cv :: Mat
- 18. .mat-Dateien in Python lesen
- 19. konvertieren const Float * in Mat
- 20. Speicher .mat in jedem Iterations
- 21. Extra Nullen in OpenCV Mat
- 22. Wie konvertiert man ein IplImage in Mat?
- 23. Akka-Streams - Wie nehme ich den materialisierten Wert der Quelle, die in einer anderen Quelle flamMapConcatenated ist?
- 24. Fehler beim Laden .mat Datei mit scipy.io (Valueerror: Mat 4 MOPT falsches Format)
- 25. python - OpenCV mat :: convertTo in python
- 26. Unterschied der OpenCV Mat Typen
- 27. Opencv im Speicher Mat-Darstellung
- 28. OpenCV nicht erkennen Mat Größe
- 29. OpenCV #define type für Mat
- 30. Schreiben Sie cv :: Mat in Binärdateien?
Es repräsentiert das Konzept der Graph Materialisation. Vielleicht möchten Sie die [docs] (http://doc.akka.io/docs/akka/2.4.10/scala/stream/stream-flows-and-basics.html#Defining_and_running_streams) lesen. – hasumedic