相关疑难解决方法(0)

marshal转储速度更快,cPickle加载速度更快

我正在实现一个需要序列化和反序列化大对象的程序,所以我正在进行一些测试pickle,cPicklemarshal选择模块来选择最佳模块.一路上我发现了一些非常有趣的东西:

我正在使用dumps然后loads(对于每个模块)列表中的dicts,元组,整数,浮点数和字符串.

这是我的基准测试的输出:

DUMPING a list of length 7340032
----------------------------------------------------------------------
pickle => 14.675 seconds
length of pickle serialized string: 31457430

cPickle => 2.619 seconds
length of cPickle serialized string: 31457457

marshal => 0.991 seconds
length of marshal serialized string: 117440540

LOADING a list of length: 7340032
----------------------------------------------------------------------
pickle => 13.768 seconds
(same length?) 7340032 == 7340032

cPickle => 2.038 seconds
(same length?) 7340032 == 7340032

marshal => 6.378 seconds
(same …
Run Code Online (Sandbox Code Playgroud)

python performance serialization

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

如何比cPickle更快地将1GB对象反序列化为Python?

我们有一个基于Python的Web服务器,它可以在启动时使用大量数据文件cPickle.数据文件(使用pickled HIGHEST_PROTOCOL)在磁盘上大约为0.4 GB,并加载到内存中大约1.2 GB的Python对象 - 这大约需要20秒.我们在64位Windows机器上使用Python 2.6.

瓶颈肯定不是磁盘(实际读取那么多数据需要不到0.5秒),但是内存分配和对象创建(创建了数百万个对象).我们希望减少20秒以减少启动时间.

有没有办法将超过1GB的对象反序列化到Python中cPickle(比如5-10x)?因为执行时间受内存分配和对象创建的约束,所以我假设使用另一种解开技术(如JSON)在这里没有帮助.

我知道有些解释型语言可以将整个内存映像保存为磁盘文件,因此可以一次性将其加载回内存,而无需为每个对象分配/创建.在Python中有没有办法做到这一点,或者实现类似的东西?

python serialization pickle deserialization

12
推荐指数
2
解决办法
5197
查看次数

以 JSON 格式发送 OpenCV 图像

我正在尝试以 json 格式发送 OpenCV 图像并在另一端接收它,但在编码和解码图像时遇到了无穷无尽的问题

我通过以下方式以 JSON 形式发送它:

dumps({"image": b64encode(image[y1:y2, x1:x2]).decode('utf-8')})
Run Code Online (Sandbox Code Playgroud)

在另一端,我尝试解码它(我需要它作为枕头图像):

image = Image.open(BytesIO(base64.b64decode(data['image'])))
Run Code Online (Sandbox Code Playgroud)

但我越来越Exception cannot identify image file <_io.BytesIO object at 0x7fbd34c98a98>

还尝试过:

nparr = np.fromstring(b64decode(data['image']), np.uint8)
image = cv2.imdecode(nparr, cv2.COLOR_BGR2RGB)
pil_image = Image.fromarray(image)
Run Code Online (Sandbox Code Playgroud)

但后来我'NoneType' object has no attribute '__array_interface__'来自Image.fromarray

有什么想法我做错了吗?

python base64 json opencv python-imaging-library

3
推荐指数
1
解决办法
8050
查看次数