使用 Memcache 缓存 Matplotlib(不会 Pickle)

2024-04-26

我有一个图表,渲染需要 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

无论如何我可以让它发挥作用吗?


关于 matplotlib 图形能够序列化的愿望存在着讨论。我还没有看到任何报告称这个问题已经得到解决,甚至被接受为一个目标。因此,如果您尝试通过网络将它们发送到 memcached,显然会失败。我在搜索时发现的讨论表明,matplotlib 当前的设计并不能轻松满足这一目标,并且需要对内部进行重构。参考:http://old.nabble.com/matplotlib-figure-serialization-td28016714.html http://old.nabble.com/matplotlib-figure-serialization-td28016714.html

为了显着减少执行时间,您可以做的就是将数据重新组织成数据集,并且只调用ax.bar()一次。然后可以将数据集序列化并以您想要的任何格式存储(例如存储到 memcached 中)。

下面是一个代码示例,显示了您的方法与将它们组合到数据集中的方法之间的测试。如果您愿意,可以在这里更轻松地查看:https://gist.github.com/2597804 https://gist.github.com/2597804

import matplotlib.pyplot as plt
from random import randint 
from time import time 

DATA = [
    (i, randint(5,30), randint(5,30), randint(30,35), randint(1,5)) \
    for i in xrange(1, 401)
]

def mapValues(group):
    ind, open_, close, high, low = group
    if open_ > close: # if open is higher then close
        height = open_ - close # heigth is drawn at bottom+height
        bottom = close
        yerr = (open_ - low, high - open_)
        color = 'r' # plot as a white barr
    else:
        height = close - open_ # heigth is drawn at bottom+height
        bottom = open_
        yerr = (close - low, high - close)
        color = 'g' # plot as a black bar

    return (ind, height, bottom, yerr, color)

#
# Test 1
#
def test1():
    fig = plt.figure()
    ax = fig.add_subplot(111)

    data = map(mapValues, DATA)

    start = time()

    for group in data: 

        ind, height, bottom, yerr, color = group

        ax.bar(left=ind, height=height, bottom=bottom, yerr=zip(yerr), 
                color=color, ecolor='k', zorder=10,
                error_kw={'barsabove': False, 'zorder': 0, 'capsize': 0}, 
                alpha=1)

    return time()-start

#
# Test 2
#
def test2():
    fig = plt.figure()
    ax = fig.add_subplot(111)

    # plotData can be serialized
    plotData = zip(*map(mapValues, DATA))

    ind, height, bottom, yerr, color = plotData

    start = time()

    ax.bar(left=ind, height=height, bottom=bottom, yerr=zip(*yerr), 
            color=color, ecolor='k', zorder=10,
            error_kw={'barsabove': False, 'zorder': 0, 'capsize': 0}, 
            alpha=1)

    return time()-start


def doTest(fn):
    end = fn()
    print "%s - Sec: %0.3f, ms: %0d" % (fn.__name__, end, end*1000)



if __name__ == "__main__":
    doTest(test1)
    doTest(test2)

    # plt.show()

Results:

python plot.py 
test1 - Sec: 1.592, ms: 1592
test2 - Sec: 0.358, ms: 357
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Memcache 缓存 Matplotlib(不会 Pickle) 的相关文章

  • 保存散点图动画

    我一直在尝试使用 matplotlib 保存动画散点图 并且我希望它不需要完全不同的代码来查看动画图形和保存副本 该图完美显示了保存完成后的所有数据点 这段代码是修改后的版本Giggi s https stackoverflow com a
  • 将逻辑回归从 R 迁移到 rpy2

    我正在尝试使用 ryp2 进行逻辑回归 我设法执行它 但不知道如何从结果中提取系数和 p 值 我不想在屏幕上打印这些值 而是创建一个函数来独立使用它们 import rpy2 robjects as ro mydata ro r data
  • 按行中的值选择 pandas 数据框中的列

    我有一个pandas DataFrame列太多 我想选择行中的值等于的所有列0 and 1 所有列的类型是int64我无法通过以下方式选择它们object或其他类型 我怎样才能做到这一点 IIUC 然后你可以使用isin http pand
  • 由于 __init__ 构造函数而产生的 Pytest 集合警告

    我一直在使用 Pytest 和 Selenium Web 驱动程序自学测试自动化 我所有的测试函数都在一个名为测试网络 py 它位于名为的目录中tests 我将所有函数分开 并将它们放在一个名为的单独目录中的自己的文件中测试用例 例如 这就
  • 在 Tensorflow 2.0 中的 tf.function input_signature 中使用字典

    我正在使用 Tensorflow 2 0 并面临以下情况 tf function def my fn items do stuff return 如果 items 是张量的字典 例如 item1 tf zeros 1 1 item2 tf
  • Python 3.8 的点子

    如何安装适用于 Python 3 8 的 Pip 我将 3 8 设置为我的默认 Python 版本 sudo apt install python3 8 pip gives 无法找到包 python3 8 pip 和跑步 python3 8
  • 什么时候会在 dict 上使用键值对作为 dict.update 方法?

    我注意到你可以做两件事来更新字典 并且它们似乎有相同的结果 a a update foo 1 a a update foo 1 两者都会产生如下所示的字典结果 foo 1 是否有任何理由更喜欢使用字典或键 值对作为更新方法 它们在功能上是否
  • Python:如何将包含对象的列表保存在文件中?

    我尝试创建不同的对象 使用类和对象 并将它们保存在文件中以便稍后编辑或检索它们 然而这就是它的样子 GlobalCategories GlobalContent def LoadData x y import pickle with ope
  • 将画布的鼠标坐标转换为地理坐标

    我正在尝试使用 Python Tkinter 创建包含意大利所有城市的地图Canvas 我在网上找到了一张意大利地图的图片 其中突出显示了一些城市 并将其插入到我的Canvas 之后 我使用一个函数来确定 2 个突出显示的城市的画布坐标 i
  • Python:如何使用 struct.pack_into 将不同类型的数据打包到字符串缓冲区中

    我正在尝试将一些无符号 int 数据打包到使用创建的字符串缓冲区中ctypes create string buffer 这是以下代码段 以及显示错误的运行示例在键盘上 http codepad org S8nUWMcW import st
  • 如何删除在 Matplotlib 中使用鼠标悬停事件创建的绘图线?

    我在带有鼠标悬停事件的图中创建了一条垂直线和一条水平线 这些线旨在帮助用户选择在图中单击的位置 我的问题是 当鼠标移动到绘图上时 之前绘制的线条不会消失 有人可以解释我该怎么做吗 我在 OnOver 函数内绘制绘图后使用了 ax lines
  • 使用 nditer 进行浅层迭代

    我有这样一个数组 gt gt gt y np random randint 0 255 2 2 3 gt gt gt array 242 14 211 198 7 0 235 60 81 164 64 236 我必须迭代每个triplet元
  • 当日志在不同进程中发出时,caplog 中的消息为空

    我正在使用 log cli true 运行测试 剧本 import logging import sys from multiprocessing import Process logging basicConfig stream sys
  • 填充 MultiIndex Pandas Dataframe 中的日期空白

    我想修改 pandas MultiIndex DataFrame 以便每个索引组都包含指定范围内的日期 我希望每个组都用值 0 或NaN Group A Group B Date Value loc a group a 2013 06 11
  • 如何在给定目标大小的情况下在 python 中调整图像大小,同时保留纵横比?

    首先 我觉得这是一个愚蠢的问题 对此感到抱歉 目前 我发现计算最佳缩放因子 目标像素数的最佳宽度和高度 同时保留纵横比 的最准确方法是迭代并选择最佳缩放因子 但是必须有更好的方法来做到这一点 一个例子 import cv2 numpy as
  • 从另一个文件执行按钮命令?

    我已经开始开发一个 GUI 系统 在该系统中 我需要从一个文件导入一个函数 以便在按下按钮时在主文件中执行 但每次运行它时 我都会得到 AttributeError partially initialized module Two has
  • 如何防止模块被导入两次?

    在编写python模块时 有没有办法防止它被客户端代码导入两次 就像 c c 头文件一样 ifndef XXX define XXX endif 非常感谢 Python 模块不会被多次导入 仅运行两次 import 不会重新加载模块 如果你
  • Python:定义多个相同类型的变量?

    可能是重复的 但至少我无法通过搜索这些术语找到答案 在Python中有没有更快的方法来做到这一点 level1 level2 level3 我试过了 level1 level2 level3 但这似乎创建了该对象的副本 这不是我想要的 和
  • 在 Django 查询中与父级一起获取子级数据

    我有两个模型产品和产品包 产品包有一个产品型号的外键 我如何访问包含产品包的所有产品的列表 class Product models Model title models CharField verbose name Product Tit
  • 使用 python 提取 MP3 URL 的 ID3 标签并进行部分下载

    我需要提取远程 mp3 文件的 ID3 标签和元数据 我写了几行可以获取本地文件的ID3标签 from mutagen mp3 import MP3 import urllib2 audio MP3 Whistle mp3 songtitl

随机推荐

  • UIScrollView 中的 UIControll 未接收触摸事件

    I use 七开关 https github com bvogelzang SevenSwitch在我的项目中 我需要将其添加到UIScrollView但当我将其添加到滚动视图时 该控件似乎无法接收触摸事件 我尝试过子类化scrollvie
  • 使用媒体编解码器将 PCM 转换为 AAC

    我正在 Android Jelly Bean 中使用媒体编解码器类将 PCM 格式编码为 AAC 该文件已编码 但没有音乐播放器能够播放该文件 我在网上找不到任何工作代码或正确的文档 这是我的代码 public void doConvert
  • 将到期日期作为 TIMESTAMP 列的默认值

    有没有办法将列的默认值设置为过期日期 从CURRENT TIMESTAMP 我已经尝试过 ALTER TABLE table ADD COLUMN expire TIMESTAMP NOT NULL DEFAULT TIMESTAMPADD
  • Chrome 控制台和 Javascript 对象类型

    我想找到 Javascipt 对象的类型 构造函数的名称 但我一直只是用我尝试过的所有方法得到一个通用的 对象 我在网上搜索过 但没有找到对我有用的 Javascript 方法 它始终只返回对象构造函数类型作为通用 对象 然而当我在 Chr
  • Jquery 单击事件不会在使用 jquery 动态创建的元素上触发

    我正在尝试创建一个简单的功能 用户从下拉列表中选择一些值 然后单击 添加 按钮以标签的形式在下面的 div 中添加所选项目 每个添加的标签都有一个删除锚点 单击该锚点即可删除该标签 现在 当单击添加按钮时 标签将被正确插入 但是当我单击标签
  • 如何以编程方式获取 iOS 应用程序中的日志消息?

    我正在使用中定义的方法https developer apple com documentation os logging https developer apple com documentation os logging在 iOS 应用
  • Tic-Tac-Toe AI:如何制作树?

    在制作井字游戏机器人时 我在尝试理解 树 时遇到了巨大的障碍 我理解这个概念 但我不知道如何实现它们 有人可以向我展示一个如何为这种情况生成树的示例吗 或者关于生成树的好教程 我想最困难的部分是生成部分树 我知道如何实现生成整棵树 但不知道
  • ofstream 不适用于 Windows 7 隐藏文件

    我意识到ofstream不适用于 Windows 7 隐藏文件 这是快速测试代码 include
  • 更改 UINavigationController 导航栏的颜色

    我正在尝试使用以下方法更改 UINavigationController 导航栏的颜色 self navigationController navigationBar tintColor UIColor brownColor 在下面给出的代
  • 使用 Xcode 6.4 的通用自定义 iOS 框架

    我使用 Xcode 6 创建了一个自定义 iOS 框架 我尝试了许多脚本来使框架通用 对于模拟器和设备 但它们都不适合我 请建议我一种为 iOS 创建自定义通用框架的方法Xcode 6 要通过终端将两个二进制文件合并为通用二进制文件 首先编
  • Android 将原始字节记录到 WAVE 文件中以进行 Http Streaming

    所以我正在使用AudioRecord从 Android 记录原始字节并将其写入 wav 文件 由于 Android 不支持此功能 我必须使用以下代码手动编写 wav 文件头 randomAccessWriter writeBytes RIF
  • 如何检查 servlet 中的 sessionId 是否有效 (java)

    我在我的 Web 应用程序中维护 sessionid 和 HttpSession 对象的映射 我使用 HttpSessionListener 从地图中填充或删除会话 当我的网络服务器崩溃 宕机并恢复时 我需要一种方法来检查提交的 sessi
  • Android 显示全屏滑块图像

    我有一个在 Android 屏幕上显示的 gridview 图像 我的要求是滑动全屏图像 这是我的代码 图像适配器 public class ImageAdapter extends BaseAdapter private Context
  • 与 WiX 3.0 一起安装 WiX 3.5

    是否可以同时安装 WiX 3 0 和 3 5 如果我在安装 3 0 后安装 3 5 它会删除 3 0 文件 如果我尝试在 3 5 之后安装 3 0 它会告诉我已经安装了较新的版本 我正在从 VS 2008 迁移到 VS 2010 因此我的应
  • 获取已安装应用程序的位置 vb.net

    我在vb net上发布了一个应用程序 用户将能够将应用程序安装在计算机上他们选择的任何位置 或者可能不是他们选择的任何位置 而是默认位置 我如何以编程方式获取用户安装应用程序的位置 换句话说 我需要应用程序知道它从哪里运行 我如何检测到这一
  • Android 使卷轴看起来在旋转的最佳方法

    我正在为 Android 制作一个简单的水果机 老虎机 我在想如何才能让 卷轴 看起来在旋转 然后逐渐停止 我的想法是有一个环绕声 然后在顶部随机生成图像 并沿着屏幕向下移动 只有部分图像可见 任何有关想法或如何完成的帮助都将非常棒 我在这
  • Scala 中的 Reader monad:返回、本地和序列

    我正在使用ReaderScala 中的 monad 由scalaz https github com scalaz scalaz图书馆 我对这个单子很熟悉正如 Haskell 中定义的 https wiki haskell org All
  • C:函数指针转换到底是什么? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 假设有人想要创建一个可以容纳多个不同类型的函数指针的数组 他将如何去做呢 也许空指针数组可以工作 事实证明 不行 因为为了使用存储在空指针中
  • 在 Chrome 扩展程序中访问 Chrome 设置

    我正在寻找开发一个 chrome 扩展程序 可以访问 wrench gt 选项 gt 引擎盖下的内容设置 那可能吗 我当时正在看API page http code google com chrome extensions api inde
  • 使用 Memcache 缓存 Matplotlib(不会 Pickle)

    我有一个图表 渲染需要 3 秒 然后可以从所述图表中添加一些内容来制作子图表 我想缓存主图表中的轴 以便稍后在渲染子图表时检索并修改它 我怎样才能克服这个错误 这是一个示例测试代码 import pylibmc cache pylibmc