Slider.on_changeコールバックを使用してグラフを更新するSliderウィジェットでBokehアプリケーションを使用しています。しかし、スライダの更新は私のコールバック関数が処理できるよりもずっと速く来ているので、着信する変更要求を抑制する方法が必要です。この問題は、スライド中にスライダがコールバックに呼び出され、最後のスライダ値(ユーザがマウスを離したとき)のみが重要です。Bokehアプリケーションのスロットル
私はこの問題にどのように対処できますか?
Slider.on_changeコールバックを使用してグラフを更新するSliderウィジェットでBokehアプリケーションを使用しています。しかし、スライダの更新は私のコールバック関数が処理できるよりもずっと速く来ているので、着信する変更要求を抑制する方法が必要です。この問題は、スライド中にスライダがコールバックに呼び出され、最後のスライダ値(ユーザがマウスを離したとき)のみが重要です。Bokehアプリケーションのスロットル
私はこの問題にどのように対処できますか?
リリース0.12
現在のところ、これは達成するにはやっかいですが、不可能ではありません。スライダーには"mouseup"
というポリシーがありますが、現在はCustomJS
コールバックにのみ適用されます。私は、これは理想的ではない、言ったように
from bokeh.io import curdoc
from bokeh.layouts import column
from bokeh.plotting import figure
from bokeh.models.callbacks import CustomJS
from bokeh.models.sources import ColumnDataSource
from bokeh.models.widgets import Slider
# this is the real callback that we want to happen on slider mouseup
def cb(attr, old, new):
print("UPDATE", source.data['value'])
# This data source is just used to communicate/trigger the real callback
source = ColumnDataSource(data=dict(value=[]))
source.on_change('data', cb)
# a figure, just for example
p = figure(x_range=(0,1), y_range=(0,1))
# add a slider with a CustomJS callback and a mouseup policy to update the source
slider = Slider(start=1, end=10, value=1, step=0.1, callback_policy='mouseup')
slider.callback = CustomJS(args=dict(source=source), code="""
source.data = { value: [cb_obj.value] }
""")
curdoc().add_root(column(slider, p))
# make sure to add the source explicitly
curdoc().add_root(source)
:それは「偽」のデータソースと結合された場合は、私たちは最後の値を通信し、トリガすることができます。将来的にこの状況を改善する可能性のある機能要求がいくつかあります。しかし、チームは非常に小さいので、あなたが貢献する能力を持っているならば、躊躇しないでください(新しい貢献者だけが新機能の開発を加速するのを助けることができます)
ありがとうございます。最後に報告された値に従ってグラフを更新するワーカースレッドを作成するとどうなりますか?それとも、スレッドセーフティの問題を導入するのでしょうか?その場合、グラフを更新するために使用できる反復タイマーを設定できますか? (スライダーの更新に起因するだけでなく、より長時間の作業を予期するため、ちょっと考えているから) – Emile
これはおそらくうまくいくかもしれませんが、[スレッドからの更新](http:// bokeh .pydata.org/ja/0.12.0/docs/user_guide/server.html#updating-from-threads) – bigreddot
この問題はBokeh 12.6で解決されましたか? – Thornhale