最近我用Python / Django为我的公司开发了一个计费应用程序。几个月来一切都很好,但现在我观察到由于越来越多的用户使用该应用程序,性能正在下降。现在问题是应用程序现在对财务团队非常关键。现在,财务团队正在追寻性能问题。我没有其他选择,只能找到一种方法来提高计费应用程序的性能。
那么你们是否知道python中的任何性能优化技术将真正帮助我解决可扩展性问题
我们正在使用mysql数据库,并将其托管在Linux机器上的apache web服务器上。其次我注意到的是,所有应用程序都很慢,而不是数据库事务部分。例如,一旦加载了应用程序,它就可以正常工作,但是如果它们导航到该应用程序上的其他链接,则需要花费很多时间。
是的,我们正在使用HTML,CSS和Javascript
答案 0 :(得分:11)
正如我在评论中所说,你必须首先找到代码的哪一部分很慢。
没有这些信息,没人能帮助你。
您可以使用Python profilers对代码进行分析,然后返回结果。
如果它是一个Web应用程序,第一个嫌疑人通常是数据库。如果它是一个微积分密集型GUI应用程序,那么首先先看一下计算算法。
但请记住,对于汽车来说,汽车问题非常不直观,因此客观评估是唯一可行的方法。
答案 1 :(得分:6)
首先,当您编写应用程序时,是否已指定性能要求?他们是否告诉你他们需要操作X才能完成不到Y秒的操作?它们是否指定了必须支持多少并发用户而不会对性能造成损害?如果没有,那么告诉他们退出并且它是迭代(阶段,阶段,无论什么)部署之一,主要目标是功能和测试。第二阶段是性能改进。让他们(显然有你的帮助)提出一些非功能性的系统性能要求。
通过这一切,a)你将消除财务团队施加的压力(我知道他们可能是一个真正的痛苦)b)你和你的客户都会清楚地知道你是什么意思是“表现”c)你将有一个基础,你可以衡量你的进度,最重要的是d)你将有一些约定的时间来实施/解决性能问题。
PS。除此之外,看看索引......:)
答案 2 :(得分:4)
Python的一个令人惊讶的特性是pythonic代码非常有效......所以一些一般提示:
当然,如果可扩展性至关重要:
O(n)
(或更好)算法!否则,您的系统无法进行线性扩展。答案 3 :(得分:2)
在你可以“修复”某些东西之前,你需要知道什么是“破碎”。在软件开发中,这意味着分析,分析,分析。我提到了剖析吗?如果没有分析,你就不知道CPU周期和挂钟时间在哪里。像其他人说过要获得更多有用的信息,您需要发布整个堆栈的详细信息。 Python版本,你用来存储数据(mysql,postgres,平面文件等),什么web服务器接口cgi,fcgi,wsgi,乘客等你如何生成HTML,CSS和假设Javascript。然后,您可以获得这些层级的更具体的答案。
答案 4 :(得分:1)
您可能对我前段时间发现的this document感兴趣。 作为个人建议,尽可能多地使用pythonic: lazy evaluation 是关键字,因此请学会使用迭代器和生成器。
答案 5 :(得分:0)
对于您所描述的应用程序类型(可能由数据库支持的Web应用程序),您的性能问题不太可能是特定于语言的。他们更有可能源于设计或架构问题,尽管它们也可能是简单的编码问题。
要对此进行排序,您需要确定应用程序中瓶颈的位置,并且您需要某种profiler。
一旦找到了瓶颈,你就会处于更好的位置。您可以针对常见问题评估问题区域,包括:
任何解决方案的具体细节都取决于您发现的瓶颈的具体情况。
答案 6 :(得分:0)
http://wiki.python.org/moin/PythonSpeed/PerformanceTips
我一段时间后优化了一些python代码,对我来说最令人惊讶的是每个函数调用的成本。如果你最小化函数调用或用内置函数替换循环,你将运行得更快。
答案 7 :(得分:0)
这里有一些很棒的建议......所以让我建议一个实现细节。我发现在django-command-extensions中找到的runprofileserver
命令非常方便用于分析我的Django代码。
答案 8 :(得分:0)
我不确定这是否能解决问题,但你应该看看psyco