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

Python程序运行无响应:为何在我的计算机上执行时会变慢且无任何反馈?

在Python编程中,当遇到程序运行无响应的问题时,通常与计算资源的消耗有关。Python使用任意精度整数进行计算,这意味着在处理大数值运算时,如计算大指数值,系统可能会因为内存或CPU资源不足而变得缓慢,甚至没有反馈。此外,代码中的无限循环或递归调用也可能导致类似问题。建议检查代码逻辑,优化算法效率,并确保计算任务不会超出系统的处理能力。

在Python中,通常整数世界中的计算是用任意大小来完成的。因此,这意味着,如果计算^{{cd1>},它不会使用32位整数或64位整数来计算,但它在Python-2.x中使用^{{cd2>},或者Python-3.x中的^{cd3>}(但是Python-3.x中的^{cd3>})具有任意大小。

^{cd1>}是一个巨大的数字。它需要1000'000位,或者至少125'000字节。它还将使用一个算法计算功率,并必须表示中间结果。

在CPython中,存储值需要133 MB内存。但这并不是结束。现在,您想将其转换为字符串。字符串将取大约301'029'995位数字。每个数字至少需要一个字节。因此,这将需要额外的301 MB内存,而且需要大量的工作来计算十进制表示:每次迭代,我们必须执行一个模10检查,而且我们需要将数字除以10,所以它在数字的位数中工作(至少)二次。由于数字的数量巨大(约3亿),因此需要大量的工作。

^{cd6>}操作并不非常昂贵,但是以上步骤在内存(以及CPU时间中的somwhat,特别是转换为字符串)都很昂贵。内存似乎是我们可以忽略的一个因素,但是如果我们消耗了大量内存,系统会减慢速度,甚至冻结。通常,如果系统内存耗尽,它将开始使用swap内存:它将RAM内存的部分交换到硬盘驱动器,这是非常慢的(与RAM内存相比)。

上面的素描方式,获得数字的数量肯定不是一个好的方法。例如,它也不能与负数一起工作。有一个叫做对数的数学概念,如果您取一个数字的log10则得到数字数减去one。这里还有一些额外的问题:负数的^{cd7>}为未定义;以及

零的^{cd7>}也不是。

但我们可以解决这些问题。例如,通过构造函数:from math import log10, floor

def number_of_digits(x):

if x == 0:

return 1

else:

return 1 + floor(log10(abs(x)))

这将适用于所有整数值。如果您想计算电源的位数,我们甚至可以首先阻止计算^{cd1>}:

^{pr2}$

因此,数字的数量为:

^{pr3}$

这在速度和内存方面都有效。



推荐阅读
  • pypy 真的能让 Python 比 C 还快么?
    作者:肖恩顿来源:游戏不存在最近“pypy为什么能让python比c还快”刷屏了,原文讲的内容偏理论,干货比较少。我们可以再深入一点点,了解pypy的真相。正式开始之前,多唠叨两句 ... [详细]
  • 关于进程的复习:#管道#数据的共享Managerdictlist#进程池#cpu个数1#retmap(func,iterable)#异步自带close和join#所有 ... [详细]
  • 在处理大规模并发请求时,传统的多线程或多进程模型往往无法有效解决性能瓶颈问题。尽管它们在处理小规模任务时能提升效率,但在高并发场景下,系统资源的过度消耗和上下文切换的开销会显著降低整体性能。相比之下,Python 的 `asyncio` 模块通过协程提供了一种轻量级且高效的并发解决方案。本文将深入解析 `asyncio` 模块的原理及其在实际应用中的优化技巧,帮助开发者更好地利用协程技术提升程序性能。 ... [详细]
  • 提升Python多环境管理效率:深入探索多Python Pip应用策略
    提升Python多环境管理效率:深入探索多Python Pip应用策略 ... [详细]
  • PyTorch 2.0来了!100%向后兼容,一行代码将训练提速76%!
    点击下方卡片,关注“CVer”公众号AICV重磅干货,第一时间送达点击进入—CV微信技术交流群转载自:机器之心PyTorch官方 ... [详细]
  • 使用Numpy实现无外部库依赖的双线性插值图像缩放
    本文介绍如何仅使用Numpy库,通过双线性插值方法实现图像的高效缩放,避免了对OpenCV等图像处理库的依赖。文中详细解释了算法原理,并提供了完整的代码示例。 ... [详细]
  • 探讨一个显示数字的故障计算器,它支持两种操作:将当前数字乘以2或减去1。本文将详细介绍如何用最少的操作次数将初始值X转换为目标值Y。 ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • 本文介绍了在 Python 3.4 中使用 Pygame 时遇到的导入错误及其解决方案。 ... [详细]
  • 在 Python 中,列表(list)是一种内置的数据类型,属于有序且可变的集合,支持随时添加或删除元素。此外,Python 还提供了多种独特的数据结构,如字典(dict)、集合(set)和元组(tuple),每种数据结构都有其特定的应用场景和优势。了解这些数值类型和数据结构对于高效编程至关重要。 ... [详细]
  • 在Python 2.7环境中使用PyCharm进行Cvxopt的安装及线性规划问题求解。具体步骤包括:通过PyCharm的文件菜单进入项目设置,选择解释器选项,点击右侧的“+”按钮,在可用包列表中搜索并安装Cvxopt。安装完成后,可以通过导入Cvxopt库并调用其函数来解决线性规划问题,提高模型的准确性和效率。 ... [详细]
  • 在Python中,可以通过导入 `this` 模块来优雅地展示“Python之禅”这一编程哲学。该模块会将这些指导原则以一种美观的方式输出到控制台。为了增加趣味性,可以考虑在代码中对输出内容进行简单的加密或混淆处理,以提升用户体验。 ... [详细]
  • 基于PythonOCC库,本文探讨了如何实现对曲线边(TopoDS_Edge)进行等间距周长分割的分析方法及其应用。通过使用BRepGProp模块中的线性属性计算功能,我们能够精确地将曲线分割成多个等长段,从而为后续的几何建模和工程应用提供基础支持。该方法不仅提高了曲线处理的效率,还增强了模型的准确性和可靠性。 ... [详细]
  • Pyhotn3基础笔记(上卷)吉多范罗苏姆(GuidovanRossum)一.解释器Python的解释器如今有多个语言的实现,包括&#x ... [详细]
  • 为什么python是动态类型语言_Python 3.7.0 面向对象的动态类型语言
    代表Python开发社区和Python3.7发布团队,我们很高兴地宣布https:www.python.orgdownloadsreleasepython-370 ... [详细]
author-avatar
搭配课彡堂-
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有