Reputation: 9078
I have a Bokeh script which calls the data using a function wrapped with joblib's @memory.cache
decorator. When I run the script as a python script the get_data function is fast (cached). When I call it using bokeh server --show code.py
it seems like cache is lost and the function is re-evaluated, making data retrieval slow. How can I make Bokeh
work nicely with Joblib?
Upvotes: 1
Views: 123
Reputation: 34618
It's hard to say for certain without being able to run an example that reproduces what you are seeing. But my guess is that it has something to do with the way the Bokeh server code runner executes the app script, on every session.
So, I can think of a few possible things to try.
First, as of 0.12.4
there's examples and guidance for embedding a Bokeh server as a library e.g. in a standalone python script, or in a Flask or Tornado app. The examples there all also use FunctionHandler
which does not exec
. My hunch is that this is more like the standard single process/single namespace python execution model, and will play better with your joblib decorator.
(If you try this route, and it works, please let use know somehow, it's probably worth documenting better.)
Otherwise, another option that might work better is to use lifecycle hooks to provide your wrapped function in a way that is sure to be shared across sessions. You can see this technique in the spectrogram example (c.f. the audio.py
)
Finally, just some gentle advice for SO. If you can include a minimal example code, that greatly increases the odds of being able to get code back in an answer. E.g., if there was example code here that I could try to get working, then I'd be able to post a complete working code in the answer.
Upvotes: 1