Concurrency-in-python-reactive-programming
リアクティブプログラミング
リアクティブプログラミングは、データフローと変更の伝播を扱うプログラミングパラダイムです。 これは、1つのコンポーネントからデータフローが発行されると、リアクティブプログラミングライブラリによって他のコンポーネントに変更が伝播されることを意味します。 変更の伝播は、最終受信者に到達するまで続きます。 イベント駆動型プログラミングと事後対応型プログラミングの違いは、イベント駆動型プログラミングはイベントを中心に展開し、反応型プログラミングはデータを中心に展開することです。
リアクティブプログラミング用のReactiveXまたはRX
ReactiveXまたはRaective Extensionは、リアクティブプログラミングの最も有名な実装です。 ReactiveXの動作は、次の2つのクラスに依存します-
観測可能なクラス
このクラスはデータストリームまたはイベントのソースであり、着信データをパックして、データがあるスレッドから別のスレッドに渡されるようにします。 オブザーバーがサブスクライブするまで、データは提供されません。
オブザーバークラス
このクラスは、 observable によって発行されたデータストリームを消費します。 observableを持つ複数のオブザーバーが存在する可能性があり、各オブザーバーは発行される各データ項目を受け取ります。 オブザーバーはオブザーバブルにサブスクライブすることにより、3種類のイベントを受け取ることができます-
- on_next()event -データストリームに要素があることを意味します。
- on_completed()event -それは放出の終わりを意味し、これ以上のアイテムは来ていません。
- on_error()event -また、エミッションの終了を意味しますが、 observable によってエラーがスローされた場合。
RxPY –リアクティブプログラミング用のPythonモジュール
RxPYは、リアクティブプログラミングに使用できるPythonモジュールです。 モジュールがインストールされていることを確認する必要があります。 次のコマンドを使用して、RxPYモジュールをインストールできます-
pip install RxPY
例
以下はPythonスクリプトで、 RxPY モジュールとそのクラス Observable および Observe for リアクティブプログラミングを使用しています。 基本的に2つのクラスがあります-
- * get_strings()*-オブザーバーから文字列を取得するため。
- * PrintObserver()*-オブザーバーから文字列を印刷するため。 オブザーバークラスの3つのイベントすべてを使用します。 また、subscribe()クラスを使用します。
from rx import Observable, Observer
def get_strings(observer):
observer.on_next("Ram")
observer.on_next("Mohan")
observer.on_next("Shyam")
observer.on_completed()
class PrintObserver(Observer):
def on_next(self, value):
print("Received {0}".format(value))
def on_completed(self):
print("Finished")
def on_error(self, error):
print("Error: {0}".format(error))
source = Observable.create(get_strings)
source.subscribe(PrintObserver())
出力
Received Ram
Received Mohan
Received Shyam
Finished
リアクティブプログラミングのためのPyFunctionalライブラリ
- PyFunctional *は、リアクティブプログラミングに使用できるもう1つのPythonライブラリです。 Pythonプログラミング言語を使用して機能的なプログラムを作成できます。 連鎖機能演算子を使用してデータパイプラインを作成できるため、便利です。
RxPYとPyFunctionalの違い
両方のライブラリはリアクティブプログラミングに使用され、同様の方法でストリームを処理しますが、両者の主な違いはデータの処理に依存します。 RxPY はシステム内のデータとイベントを処理し、 PyFunctional は関数型プログラミングパラダイムを使用したデータの変換に焦点を当てています。
PyFunctionalモジュールのインストール
このモジュールを使用する前にインストールする必要があります。 それは次のようにpipコマンドの助けを借りてインストールすることができます-
pip install pyfunctional
例
次の例では、PyFunctional モジュールとその *seq クラスを使用します。これらのクラスは、反復および操作できるストリームオブジェクトとして機能します。 このプログラムでは、すべての値を2倍にするlamda関数を使用してシーケンスをマッピングし、xが4より大きい値をフィルター処理し、最後に残りのすべての値の合計にシーケンスを縮小します。
from functional import seq
result = seq(1,2,3).map(lambda x: x*2).filter(lambda x: x > 4).reduce(lambda x, y: x + y)
print ("Result: {}".format(result))
出力
Result: 6