小编Mer*_*ing的帖子

Redis vs Disk在缓存应用程序中的性能

我想在python中创建一个redis缓存,就像任何一个自尊的科学家一样,我做了一个基准测试来测试性能.

有趣的是,redis并没有那么好.要么Python正在做一些神奇的事情(存储文件),要么我的版本的redis非常慢.

我不知道这是因为我的代码的结构方式,还是什么,但是我期待redis比它更好.

要创建redis缓存,我将二进制数据(在本例中为HTML页面)设置为从文件名派生的密钥,其有效期为5分钟.

在所有情况下,使用f.read()完成文件处理(这比f.readlines()快约3倍,我需要二进制blob).

在我的比较中是否存在我缺少的东西,或者Redis真的与磁盘不匹配?Python是否在某处缓存文件,并且每次都重新访问它?为什么这比访问redis要快得多?

我在64位Ubuntu系统上使用redis 2.8,python 2.7和redis-py.

我不认为Python正在做任何特别神奇的事情,因为我创建了一个将文件数据存储在python对象中并永久产生它的函数.

我有四个函数调用我分组:

读取文件X次

调用一个函数来查看redis对象是否仍在内存中,加载它或缓存新文件(单个和多个redis实例).

一个创建生成器的函数,该生成器从redis数据库生成结果(具有redis的单个和多个实例).

最后,将文件存储在内存中并永久生成.

import redis
import time

def load_file(fp, fpKey, r, expiry):
    with open(fp, "rb") as f:
        data = f.read()
    p = r.pipeline()
    p.set(fpKey, data)
    p.expire(fpKey, expiry)
    p.execute()
    return data

def cache_or_get_gen(fp, expiry=300, r=redis.Redis(db=5)):
    fpKey = "cached:"+fp

    while True:
        yield load_file(fp, fpKey, r, expiry)
        t = time.time()
        while time.time() - t - expiry < 0:
            yield r.get(fpKey)


def cache_or_get(fp, expiry=300, r=redis.Redis(db=5)):

    fpKey = "cached:"+fp

    if r.exists(fpKey):
        return r.get(fpKey) …
Run Code Online (Sandbox Code Playgroud)

python performance caching generator redis

28
推荐指数
1
解决办法
1万
查看次数

Python OpenCV cv.WaitKey正确地在Ubuntu模256映射上回吐奇怪的输出

我正在使用OpenCV 2.2运行Ubuntu 11.10(联想T400)(我相信导入是作为cv导入cv2.cv完成的).如果我只是'导入cv',也会发生这个问题.

我最近开始遇到这个问题,这有点奇怪.我不知道我做了什么重要的事情,自从它开始发生以来我已经重新启动了.我安装了几个程序,但我不认为这会影响到这一点.

当我使用人工图像显示(只是一个黑色图像)时,我尝试轮询cv.WaitKey(10).它吐回垃圾.

这是我的OpenCV代码:

import cv2.cv as cv
import time

cv.NamedWindow("camera", 1)
img = cv.CreateImage((400,400), 8, 3)
valkeys = range(1,255)
f = open('/home/andrew/webuploads/keyboardtest', 'wb')
while True:
    cv.ShowImage("camera", img)
    k = cv.WaitKey(10)
    if k is -1:
        pass
    else:
        print 'writing %s' %str(k)
        f.write((str(k)+' '))

f.close()
Run Code Online (Sandbox Code Playgroud)

这是我从程序中得到的输出:

1048678 1048676 1048673 1048691 1048676 1048678 1048689 1048695 1048677 1048688 1048687 1048681 1048677 1048677 1048695 1048624 1048633 1048690 1048633 1048624 1048695 1048677 1048690 1048624 1048633 1048681 1048677 1048681 1048688 1048687 1048677 1048681 1048692 …

python opencv modulo

9
推荐指数
1
解决办法
4621
查看次数

读取内存映射bzip2压缩文件

所以我在玩维基百科转储文件。它是一个经过 bzip 压缩的 XML 文件。我可以将所有文件写入目录,但是当我要进行分析时,我必须重新读取磁盘上的所有文件。这让我可以随机访问,但速度很慢。我有 ram 可以将整个 bzipped 文件放入 ram。

我可以很好地加载转储文件并读取所有行,但我无法在其中查找,因为它太大了。从表面上看,bz2 库必须先读取并捕获偏移量,然后才能将我带到那里(并将其全部解压缩,因为偏移量以解压缩字节为单位)。

无论如何,我正在尝试映射转储文件(~9.5 gigs)并将其加载到 bzip 中。我显然想之前在 bzip 文件上测试这个。

我想将 mmap 文件映射到 BZ2File 以便我可以通过它查找(以获得特定的未压缩字节偏移量),但从表面上看,如果不解压缩整个 mmap 文件(这将远远超过 30千兆字节)。

我有什么选择吗?

这是我写的一些代码来测试。

import bz2
import mmap

lines = '''This is my first line
This is the second
And the third
'''

with open("bz2TestFile", "wb") as f:
    f.write(bz2.compress(lines))

with open("bz2TestFile", "rb") as f:
    mapped = mmap.mmap(f.fileno(), 0, prot=mmap.PROT_READ)

    print "Part of MMAPPED"
    # This does not work until I hit a minimum length
    # due …
Run Code Online (Sandbox Code Playgroud)

python mmap bzip2

6
推荐指数
1
解决办法
1854
查看次数

我怎样才能整理这个文件名清理工具?

我知道有更好的方法可以做到这一点,但我不知道它是什么.我正在整理文件列表,我想删除"通常的嫌疑人",以便我可以将一个列表与另一个列表进行比较.

根据我的理解,name.replace()会查看listToClean中的每个项目以查找我选择的短语,如果存在则替换它们.必须有一个更好的方法来做到这一点......

def cleanLists(listToClean, extList):
    cleanFileList = []
    for filename in listToClean:
        name = os.path.split(filename)[1]
        ext = os.path.splitext(name)
        if ext[1] in extList:
            name = name.replace(ext[1], '') 
            name = name.replace('1080p', '')
            name = name.replace('1080P', '')
            name = name.replace('720p', '')
            name = name.replace('720P', '')
            name = name.replace('HD', '')
            name = name.replace('(', ' ')
            name = name.replace(')', '')
            name = name.replace('.', ' ')
            cleanFileList.append(name)
    cleanFileList.sort(key=lambda x: x.lower())
    return cleanFileList
Run Code Online (Sandbox Code Playgroud)

python indexing

2
推荐指数
1
解决办法
132
查看次数

标签 统计

python ×4

bzip2 ×1

caching ×1

generator ×1

indexing ×1

mmap ×1

modulo ×1

opencv ×1

performance ×1

redis ×1