問題タブ [rx-py]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - stdin などのストリームから rx.py Observable を作成するにはどうすればよいですか?
rxpy
関数型リアクティブ プログラミング (FRP)のライブラリについて理解を深めようとしていますが、すでに障害にぶつかっています。標準入力 ( ) を介してデータがストリーミングされることを期待する小さなプログラムを作成していますsys.stdin
。
rx.Observable
したがって、私の質問は単純です。標準入力から非同期に読み取るインスタンスを作成するにはどうすればよいですか? Observable
ストリームからインスタンスを作成する組み込みメカニズムはありますか?
reactive-programming - ReactiveX (Rx) - 長押しイベントの検出
Rx で次の問題を解決するための標準的なアプローチは何か疑問に思っています: 2 つのオブザーバブル と がmouse_down
ありmouse_up
、その要素がマウス ボタンの押下を表すとします。非常に単純なシナリオでは、長押しを検出したい場合、次の方法で実行できます (この場合は RxPy を使用しますが、概念的にはどの Rx 実装でも同じです)。
mouse_down
ただし、オブザーバブルからオブザーバブルに情報を引き上げる必要がある場合、問題が発生しmouse_up
ます。たとえば、Observable の要素に、どのマウス ボタンが押されたかに関する情報が格納されているとします。明らかに、対応するボタンのみとペアリングmouse_down
したいでしょう。mouse_up
私が思いついた1つの解決策はこれです:
もっと簡単な解決策があれば、ぜひ聞いてみたいと思いますが、私が知る限り、これは機能します。ただし、 と の間でマウスが移動した距離も検出したい場合は、さらに複雑にmouse_down
なりmouse_up
ます。このためにmouse_move
、マウスの位置に関する情報を運ぶ新しい observable を導入する必要があります。
しかし、これは私が立ち往生するところです。ボタンを 1 秒以上押し続けると、ブール値が大量に取得されます。ただし、すべてが false の場合にのみ、長押しを検出したいと考えています。これは、 all 演算子の完璧なケースのように思えます。小さなステップが欠けているだけのように感じますが、これまでのところ、それを機能させる方法を理解できていません。私も逆にやっているのかもしれません。提案をお待ちしております。
python - Python 関数ではありません
マッピングしている RxPy ストリームのハンドラーとして使用できる関数を構築しようとしています。私が持っている関数は、その変数が定義されているスコープ外の変数にアクセスする必要があります。これは、私にとって、ある種のクロージャーを使用する必要があることを意味します。そこで、functools.partial に到達して、1 つの変数を閉じ、ストリームにオブザーバーとして渡すことができる部分関数を返します。
ただし、これを行うと、次の結果になります。
問題を再現するサンプル コードを次に示します。
False
問題は、呼び出し時に部分関数が返されることのようinspect.isfunction
です。
部分関数をこのチェックにパスさせるにはどうすればよいですか? 部分関数を「実際の」関数型に簡単に変換する方法はありますか?
reactive-programming - 両方が同時に変化する場合の Observable の結合
RxPY を使用して ReactiveX を GUI に統合しようとしています。これは ReactiveX に関する一般的な質問です。
を使用して複数の Observable ストリームに依存する視覚化があるとしますcombine_latest(stream1, stream2, plot_function)
。これは、ユーザーが値を変更したときなど、1 つの Observable が変更されたときにうまく機能します。新しい値を使用して視覚化が更新されます。ただし、ユーザーが単一のファイルから両方のストリームのデータをロードする場合など、両方の Observable が同時に更新されることがあります。技術的には、一方の Observable が他方の前に更新されます (インポート関数で最初に来る方)。その結果、プロットは 2 回更新されますが、すべての意図と目的のために 1 回だけ更新する必要があります。
私が持っているビジュアライゼーションの一部は計算にコストがかかるため、両方のストリームが同時に更新された場合、結合されたストリームが 1 つの値のみを出力するようにしたいと考えています。いくつかのオプションを考えることができます:
debounce()
結合されたストリームで短いタイムアウト (50 ミリ秒など) で使用します。このアプローチは私には汚いようです。combine_latest
直接使用しないでください。何らかのupdating
フラグを持つ新しいオブジェクトで 2 つのストリームをラップします。フラグを True に設定すると、フラグを Falseupdating
に設定するまで何も出力されません。updating
このアプローチはステートフルに感じられ、ストリームの構成可能性が損なわれます。すべてのストリームが更新されるまで、すべてのビジュアライゼーションを更新しないように指示します。繰り返しますが、可視化は上流で何が起こっているかを気にする必要がないため、カプセル化が壊れます。結合されたストリームから新しい値を受け取り、きれいな画像を作成するだけです。
ビジュアライゼーションを十分に細かくして、最初に 1 つのストリームを更新してもパフォーマンスがわずかに低下するだけにします。これは、ポイントとメッシュ サイズに基づいてメッシュを計算するビジュアライゼーションなど、一部のビジュアライゼーションでは不可能です。ポイントまたはメッシュ サイズが変更された場合、メッシュ全体を再計算する必要があります。
複数のストリームを「同時に」更新するための Rx の機能はありますか? 私が求めているのは魔法のような気がします。
Rx を使用して GUI プログラムを作成したことがある人へ: ストリームを介して新しい値を送信する以外に、モデルに使用すべきより良いアーキテクチャはありますか?
この質問が不明な場合は、コメントで教えてください。より具体的な例を作成しようとします。
例
サンプルの Python RxPY プログラムを次に示します。
これは以下を出力します:
stream1
次の結果になるように、 と の値をstream2
同時に更新するにはどうすればよいですか?
言い換えれば、combine_latest
下流に「次の値を発行する前に他のストリームを更新する間、ちょっと待ってください」と伝えることができるように変更するにはどうすればよいでしょうか?
python - RxPY の from_iterable/range を使用した subscribe_on
Pythonのリアクティブ拡張機能でのスケジューリングについて頭を悩ませようとしています。subscribe_on
複数のオブザーバブルを並行して処理するために使用したいと思います。これは、オブザーバブルが で作成されている場合は正常に機能しますがjust
、たとえばrange
またはfrom_
が使用されている場合は機能しません。
just
のデフォルトは ですがScheduler.immediate
、他のジェネレータのデフォルトはScheduler.current_thread
です。それが違いを引き起こしますが、私には一貫性がありません。おそらく、私は完全な問題を把握していないからです。
次の例を検討してください。
observe_on
スケジューラーがジェネレーターに直接渡された場合に動作しますが、オブザーバブルの作成を処理から切り離して、次のようなことを実現したいと思います。
私は誤解していsubscribe_on
ますか?私のアプローチは間違っていますか?
python - RxPY でボタンの押下を監視する
Pythonでキープレスイベントのストリームを「聞く」にはどうすればよいですか?
私はこのようなことをしたい:
しかし、どうすればこれを作成できますclick_stream
か?