热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

pythonlength字节,pythonhowtogetiobytesallocatedmemorylength?

原文:Thisisthecodeiamusingtotestthememoryallocationimportpycurlimportiourlhttp:www.s

原文:

This is the code i am using to test the memory allocation

import pycurl

import io

url = "http://www.stackoverflow.com"

buf = io.BytesIO()

print(len(buf.getvalue())) #here i am getting 0 as length

c = pycurl.Curl()

c.setopt(c.URL, url)

c.setopt(c.CONNECTTIMEOUT, 10)

c.setopt(c.TIMEOUT, 10)

c.setopt(c.ENCODING, 'gzip')

c.setopt(c.FOLLOWLOCATION, True)

c.setopt(c.IPRESOLVE, c.IPRESOLVE_V4)

c.setopt(c.USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0) Gecko/20100101 Firefox/8.0')

c.setopt(c.WRITEFUNCTION, buf.write)

c.perform()

c.close()

print(len(buf.getvalue())) #here length of the dowloaded file

print(buf.getvalue())

buf.close()

How to get the allocated buffer/memory length by BytesIO ?

what am i doing wrong here ? python doesn't allocate fixed buffer length ?

# Answer 1

4d350fd91e33782268f371d7edaa8a76.png

I am not sure what you mean by allocated buffer/memory length, but if you want the length of the user data stored in the BytesIO object you can do

>>> bio = io.BytesIO()

>>> bio.getbuffer().nbytes

0

>>> bio.write(b'here is some data')

17

>>> bio.getbuffer().nbytes

17

But this seems equivalent to the len(buf.getvalue()) that you are currently using.

The actual size of the BytesIO object can be found using sys.getsizeof():

>>> bio = io.BytesIO()

>>> sys.getsizeof(bio)

104

Or you could be nasty and call __sizeof__() directly (which is like sys.getsizeof() but without garbage collector overhead applicable to the object):

>>> bio = io.BytesIO()

>>> bio.__sizeof__()

72

Memory for BytesIO is allocated as required, and some buffering does take place:

>>> bio = io.BytesIO()

>>> for i in range(20):

... _=bio.write(b'a')

... print(bio.getbuffer().nbytes, sys.getsizeof(bio), bio.__sizeof__())

...

1 106 74

2 106 74

3 108 76

4 108 76

5 110 78

6 110 78

7 112 80

8 112 80

9 120 88

10 120 88

11 120 88

12 120 88

13 120 88

14 120 88

15 120 88

16 120 88

17 129 97

18 129 97

19 129 97

20 129 97

# Answer 2

io.BytesIO() returns a standard file object which has function tell(). It reports the current descriptor position and does not copy the whole buffer out to compute total size as len(bio.getvalue()) of bio.getbuffer().nbytes. It is a very fast and simple method to get the exact size of used memory in the buffer object.

I posted an example code and a more detailed answer here

# Answer 3

You can also use tracemalloc to get indirect information about the size of objects, by wrapping memory events in tracemalloc.get_traced_memory()

Do note that active threads (if any) and side effects of your program will affect the output, but it may also be more representative of the real memory cost if many samples are taken, as shown below.

>>> import tracemalloc

>>> from io import BytesIO

>>> tracemalloc.start()

>>>

>>> memory_traces = []

>>>

>>> with BytesIO() as bytes_fh:

... # returns (current memory usage, peak memory usage)

# ..but only since calling .start()

... memory_traces.append(tracemalloc.get_traced_memory())

... bytes_fh.write(b'a' * (1024**2)) # create 1MB of 'a'

... memory_traces.append(tracemalloc.get_traced_memory())

...

1048576

>>> print("used_memory = {}b".format(memory_traces[1][0] - memory_traces[0][0]))

used_memory = 1048870b

>>> 1048870 - 1024**2 # show small overhead

294



推荐阅读
  • Java Socket 关键参数详解与优化建议
    Java Socket 的 API 虽然被广泛使用,但其关键参数的用途却鲜为人知。本文详细解析了 Java Socket 中的重要参数,如 backlog 参数,它用于控制服务器等待连接请求的队列长度。此外,还探讨了其他参数如 SO_TIMEOUT、SO_REUSEADDR 等的配置方法及其对性能的影响,并提供了优化建议,帮助开发者提升网络通信的稳定性和效率。 ... [详细]
  • Python 程序转换为 EXE 文件:详细解析 .py 脚本打包成独立可执行文件的方法与技巧
    在开发了几个简单的爬虫 Python 程序后,我决定将其封装成独立的可执行文件以便于分发和使用。为了实现这一目标,首先需要解决的是如何将 Python 脚本转换为 EXE 文件。在这个过程中,我选择了 Qt 作为 GUI 框架,因为之前对此并不熟悉,希望通过这个项目进一步学习和掌握 Qt 的基本用法。本文将详细介绍从 .py 脚本到 EXE 文件的整个过程,包括所需工具、具体步骤以及常见问题的解决方案。 ... [详细]
  • FastDFS Nginx 扩展模块的源代码解析与技术剖析
    FastDFS Nginx 扩展模块的源代码解析与技术剖析 ... [详细]
  • 为了在Hadoop 2.7.2中实现对Snappy压缩和解压功能的原生支持,本文详细介绍了如何重新编译Hadoop源代码,并优化其Native编译过程。通过这一优化,可以显著提升数据处理的效率和性能。此外,还探讨了编译过程中可能遇到的问题及其解决方案,为用户提供了一套完整的操作指南。 ... [详细]
  • 本指南介绍了如何在ASP.NET Web应用程序中利用C#和JavaScript实现基于指纹识别的登录系统。通过集成指纹识别技术,用户无需输入传统的登录ID即可完成身份验证,从而提升用户体验和安全性。我们将详细探讨如何配置和部署这一功能,确保系统的稳定性和可靠性。 ... [详细]
  • 利用 Python Socket 实现 ICMP 协议下的网络通信
    在计算机网络课程的2.1实验中,学生需要通过Python Socket编程实现一种基于ICMP协议的网络通信功能。与操作系统自带的Ping命令类似,该实验要求学生开发一个简化的、非标准的ICMP通信程序,以加深对ICMP协议及其在网络通信中的应用的理解。通过这一实验,学生将掌握如何使用Python Socket库来构建和解析ICMP数据包,并实现基本的网络探测功能。 ... [详细]
  • Java能否直接通过HTTP将字节流绕过HEAP写入SD卡? ... [详细]
  • 基于Dubbo与Zipkin的微服务调用链路监控解决方案
    本文提出了一种基于Dubbo与Zipkin的微服务调用链路监控解决方案。通过抽象配置层,支持HTTP和Kafka两种数据上报方式,实现了灵活且高效的调用链路追踪。该方案不仅提升了系统的可维护性和扩展性,还为故障排查提供了强大的支持。 ... [详细]
  • 本文详细介绍了使用 Python 进行 MySQL 和 Redis 数据库操作的实战技巧。首先,针对 MySQL 数据库,通过 `pymysql` 模块展示了如何连接和操作数据库,包括建立连接、执行查询和更新等常见操作。接着,文章深入探讨了 Redis 的基本命令和高级功能,如键值存储、列表操作和事务处理。此外,还提供了多个实际案例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 本文探讨了 Kafka 集群的高效部署与优化策略。首先介绍了 Kafka 的下载与安装步骤,包括从官方网站获取最新版本的压缩包并进行解压。随后详细讨论了集群配置的最佳实践,涵盖节点选择、网络优化和性能调优等方面,旨在提升系统的稳定性和处理能力。此外,还提供了常见的故障排查方法和监控方案,帮助运维人员更好地管理和维护 Kafka 集群。 ... [详细]
  • 本文介绍了如何在iOS平台上使用GLSL着色器将YV12格式的视频帧数据转换为RGB格式,并展示了转换后的图像效果。通过详细的技术实现步骤和代码示例,读者可以轻松掌握这一过程,适用于需要进行视频处理的应用开发。 ... [详细]
  • 深入解析 Vue3 中的响应式 API:shallowReactive、shallowRef、triggerRef 和 customRef 的使用与原理
    深入解析 Vue3 中的响应式 API:shallowReactive、shallowRef、triggerRef 和 customRef 的使用与原理 ... [详细]
  • 在过去,我曾使用过自建MySQL服务器中的MyISAM和InnoDB存储引擎(也曾尝试过Memory引擎)。今年初,我开始转向阿里云的关系型数据库服务,并深入研究了其高效的压缩存储引擎TokuDB。TokuDB在数据压缩和处理大规模数据集方面表现出色,显著提升了存储效率和查询性能。通过实际应用,我发现TokuDB不仅能够有效减少存储成本,还能显著提高数据处理速度,特别适用于高并发和大数据量的场景。 ... [详细]
  • 在Bugku Web CTF实战演练中,通过细致的源代码检查,我们发现了一个隐藏的滑稽笑脸图标,进一步分析后成功找到了flag。此外,还探讨了如何利用计算器功能进行安全测试,提升了对Web漏洞的识别和利用技巧。 ... [详细]
  • Python爬虫入门:深入解析HTTP协议与Requests库的应用
    Python爬虫入门:深入解析HTTP协议与Requests库的应用 ... [详细]
author-avatar
日全食x_354
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有