Python中的优化技术

11 投票
9 回答
2089 浏览
提问于 2025-04-15 21:02

最近我为公司开发了一个账单应用,使用的是Python和Django。几个月以来,一切都很顺利,但现在我发现由于用户越来越多,应用的性能开始下降。现在这个应用对财务团队来说非常重要,他们一直在催我解决性能问题。我别无选择,只能想办法提高这个账单应用的性能。

所以你们有没有什么Python的性能优化技巧,可以帮我解决这个扩展性的问题?

我们使用的是MySQL数据库,托管在Linux的Apache服务器上。其次,我注意到整体应用比较慢,而不是数据库的交易部分。例如,一旦应用加载完成,它运行得还不错,但如果用户在应用中切换到其他链接,就会花很长时间。

对了,我们还使用了HTML、CSS和JavaScript。

9 个回答

6

好吧,虽然这不是完全切题,但在你开始修复问题之前,确保大家都理解情况。看起来他们在给你施加压力,让你去解决这个“问题”。

首先,当你写这个应用程序的时候,他们有没有告诉你性能要求?比如,他们有没有说过操作X需要在Y秒内完成?或者他们有没有说明需要支持多少个同时用户而不影响性能?如果没有,那就告诉他们先别急,这只是部署的第一阶段,主要目标是功能和测试。第二阶段才是性能改进。让他们(当然你也要帮忙)一起想出一些关于系统性能的非功能性要求。

通过这样做,a) 你可以减轻财务团队施加的压力(我知道他们有时候真的很麻烦),b) 你和你的客户都会对“性能”有一个清晰的理解,c) 你会有一个基础来衡量你的进展,最重要的是 d) 你会有一个大家都同意的时间来实施或修复性能问题。

PS. 另外,看看索引的问题... :)

11

正如我在评论中提到的,你首先需要找出代码中哪个部分运行得慢。

没有这些信息,别人是无法帮助你的。

你可以使用Python 的性能分析工具来检查你的代码,然后把结果告诉我们。

如果你是在做一个网页应用,首先要怀疑的通常是数据库。如果是一个计算密集型的图形界面应用,那就先看看计算的算法。

但要记住,性能问题有时很难直观判断,因此,客观的评估是解决问题的唯一方法。

4

Python有一个让人惊讶的特点,那就是用Python写的代码效率很高……所以这里有一些通用的小建议:

  • 尽量使用内置函数和标准函数,因为它们已经经过很好的优化。
  • 尽量使用懒加载生成器,而不是一次性用的临时列表。
  • 做向量运算时,使用numpy库。
  • 如果你在32位的x86系统上运行,可以使用psyco来提高性能。
  • 在性能要求高的循环中,可以考虑用更底层的语言(比如C、Pyrex、Cython等)来编写。
  • 当你需要调用一组对象的同一个方法时,先获取这个类的方法引用,然后使用它,这样可以节省在对象字典中查找的时间(这个算是微优化,不确定是否值得)

当然,如果你关注的是可扩展性:

  • 使用O(n)(或者更好的)算法!否则你的系统就无法线性扩展。
  • 编写支持多处理器的代码。到了一定时候,你需要增加计算能力,你的软件必须准备好使用这些资源!

撰写回答