2016-07-14 13 views
7

मेरे पास एक स्लाइडर विजेट के साथ बोके एप्लिकेशन है जो मेरे ग्राफ को अपडेट करने के लिए स्लाइडर.ऑन_change कॉलबैक का उपयोग करता है। हालांकि, स्लाइडर अपडेट मेरे कॉलबैक फ़ंक्शन को संभालने से बहुत तेज़ी से आते हैं इसलिए मुझे आने वाले परिवर्तन अनुरोधों को थ्रॉटल करने का एक तरीका चाहिए। स्लाइडर के दौरान कॉलबैक कॉलबैक में कॉल करने के बाद समस्या बहुत प्रमुख है, जबकि केवल अंतिम स्लाइडर मान (जब उपयोगकर्ता माउस जारी करता है) ब्याज का होता है।बोके आवेदन में थ्रॉटलिंग

मैं इस समस्या से कैसे निपट सकता हूं?

उत्तर

11

रिलीज के रूप में 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) 

जैसा कि मैंने कहा, यह आदर्श नहीं है। कुछ खुले फीचर अनुरोध हैं जो भविष्य में इस स्थिति को बेहतर बना सकते हैं। हालांकि टीम काफी छोटी है, इसलिए यदि आपके पास योगदान करने की क्षमता है, तो कृपया पहुंचने में संकोच न करें (केवल नए योगदानकर्ता नई सुविधाओं के विकास में तेजी लाने में मदद कर सकते हैं)

+0

सुझाव के लिए धन्यवाद। एक वर्कर थ्रेड बनाने के बारे में क्या है जो पिछले रिपोर्ट किए गए मान के अनुसार ग्राफ़ को अपडेट करेगा? या वह थ्रेड-सुरक्षा समस्याओं को पेश करेगा? उस स्थिति में, क्या मैं एक पुनरावर्ती टाइमर सेट कर सकता हूं जिसे मैं ग्राफ अपडेट करने के लिए उपयोग कर सकता हूं? (केवल कुछ विचार क्योंकि मैं अधिक लंबे समय से चलने वाले कार्यों की अपेक्षा करता हूं, न केवल स्लाइडर अपडेट के कारण) – Emile

+1

यह शायद काम कर सकता है लेकिन आपको [थ्रेड से अपडेट करने] पर उपयोगकर्ता के गाइड अनुभागों का अध्ययन/संदर्भित करने की आवश्यकता होगी (http: // bokeh .pydata.org/en/0.12.0/docs/user_guide/server.html # अद्यतन-से-थ्रेड्स) – bigreddot

+0

क्या यह समस्या बोके 12.6 में हल हो गई है? – Thornhale

संबंधित मुद्दे