Hello!
I’m trying to build a dashboard to allow a user to specify a list of devices and a type of report and hit a “generate” button that would then pull data from a server and present multiple plots.
I’ve used http://stackoverflow.com/questions/38548442/dynamically-add-remove-plot-using-bokeh-serve-bokeh-0-12-0 as a basis for my work, except instead of a toggle I have a periodic callback running every 5s to check the state of the document - i.e. has a plot been requested and if so has a plot been rendered and if not, grab the data and render it.
After a user entered a device ID and a date, I have the user hit a generate button which sets a flag to true and then in the periodic callback it will check to see if the flag is true and then call a function to pull the data from a remote server and pushes it into a ColumnDataSource, and then generate the plot and add it to the children as per the link above.
However, sometimes if I have multiple device’s plots being generated at the same time then it can take > 5s for the server/data processing to finish and at that point I believe the client and server get out of sync with errors like
2017-03-26 10:24:54,551 error handling message Message ‘PATCH-DOC’ (revision 1): RuntimeError(‘Cannot apply patch to c533e616-0a6d-4b04-9eec-7a3b106f29ba which is not in the document’,)
2017-03-26 10:24:54,661 error handling message Message ‘PATCH-DOC’ (revision 1): DeserializationError(“Instance(Plot) failed to deserialize reference to {u’subtype’: u’Figure’, u’type’: u’Plot’, u’id’: u’03397330-615c-40a3-ad13-3ffacf4d4125’}”,)
I’ve tried following Running a Bokeh server — Bokeh 2.4.2 Documentation but I’m new to server/client architectures.
I’m thinking clicking the “generate” button should launch a new thread that would pull the data from the server and append it to the CDS, and then at the end of the new thread add a tick callback to add the graph? Note that the data is around 20-30k points potentially with a max around 86k (1 point per second for a 24 hour period).
Thank you in advance. Bokeh rocks!