Bokeh 和 Joblib 不能一起玩

Bokeh and Joblib don't play together

我有一个 Bokeh 脚本,它使用用 joblib 的 @memory.cache 装饰器包装的函数调用数据。当我 运行 脚本作为 python 脚本时, get_data 函数很快(缓存)。当我使用 bokeh server --show code.py 调用它时,缓存似乎丢失并且函数被重新评估,从而使数据检索变慢。我怎样才能使 Bokeh 与 Joblib 一起很好地工作?

如果无法 运行 一个重现您所见内容的示例,则很难确定。但我的猜测是,它与 Bokeh 服务器代码 运行ner 在每个会话中执行应用程序脚本的方式有关。

所以,我可以想出一些可能的尝试。

首先,从 0.12.4 开始,有 embedding a Bokeh server as a library 的示例和指南,例如在独立的 python 脚本中,或者在 Flask 或 Tornado 应用程序中。那里的例子也都使用 FunctionHandler 而不是 exec。我的直觉是,这更像是标准的单一 process/single 命名空间 python 执行模型,并且会更好地与您的 joblib 装饰器一起使用。

(如果你尝试这条路线,并且它有效,请以某种方式告知用户,它可能值得更好地记录。)

否则,另一个可能更好的选择是使用 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)


最后,给 SO 一些温和的建议。如果您可以包括一个最小的示例代码,那将大大增加能够在答案中取回代码的几率。例如,如果这里有我可以尝试开始工作的示例代码,那么我将能够在答案中 post 一个完整的工作代码。