【发布时间】:2012-04-30 21:00:27
【问题描述】:
我有一个渲染图表需要 3 秒,然后可以从所述图表制作子图表,其中添加了东西。我想缓存主图表中的轴,以便稍后在渲染子图表时检索并修改它。我怎样才能克服这个错误?
这是一个示例测试代码:
import pylibmc
cache = pylibmc.Client(["127.0.0.1"], binary=True, behaviors={"tcp_nodelay": True, "ketama": True})
import matplotlib.pyplot as plt
cache_name = 'test'
fig = plt.figure(figsize=(20, 7))
ax = fig.add_axes([0, 0.15, 0.98, 0.85])
cache.set(cache_name, ax, 300)
这给出了以下错误:
cPickle.PicklingError: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed
无论如何我可以让它工作吗?
【问题讨论】:
-
数据结构是需要 3 秒的部分还是 matplotlib 的实际绘图?之前已经讨论过这个问题,显然在使 matplotlib 可序列化方面没有做任何事情。
-
Matplotlib 绘图。由于他们的烛台图很烂,我正在使用单独的条形图绘制烛台图。而且由于我无法通过列表(差异颜色、值、误差线)使条形图工作,因此我将通过一个循环(大约 400 个项目)单独添加每个条形图,这可能会导致它花费这么长时间。此处的示例脚本:pastebin.com/6aD8YZfM。如果我可以缓存最后一组条形图,时间就不会那么重要了。
-
那么在那个示例循环中,轴的创建需要时间吗?而你这样做 400 次以生成需要 3 秒的轴集合?
-
该循环中的每次大约需要 0.01 到 0.03 秒 x 400 使我在大约 4-5 秒内将所有条形放置在图像上。其他一切都很快。如果我可以缓存条形集合或加快添加条形(可能批量添加),我会很高兴。
标签: python memcached matplotlib pickle