It seems like the displayed range is not updated correctly if start or end is updated. Expected or missing piping?
from bokeh.io import curdoc
from bokeh.layouts import column
from bokeh.models import RangeSlider, Button
duration_slider = RangeSlider(start=0, end=24, value=(0,24), step=.1)
def change_range_end():
duration_slider.end = 12
button = Button(label="Change range end")
button.on_click(change_range_end)
curdoc().add_root(column(duration_slider, button))