<p>程序效率通常低于80/20规则(或者一些人称之为90/10规则,甚至95/5规则)。也就是说,80%的时间程序实际运行在20%的代码中。换句话说,有一个很好的例子表明你的代码有一个“瓶颈”:一小部分代码运行得很慢,而其余的代码运行得很快。您的目标是确定瓶颈(或瓶颈),然后修复它(或瓶颈)以更快地运行。</p>
<p>最好的方法是分析你的代码。这意味着您要记录在<a href="http://docs.python.org/2/library/logging.html" rel="nofollow">logging</a>模块中发生特定操作的时间,使用<a href="http://docs.python.org/2/library/timeit.html" rel="nofollow">timeit</a>就像建议的注释程序一样,使用一些内置的<a href="http://docs.python.org/2/library/profile.html" rel="nofollow">profilers</a>,或者只是在程序的各个点打印出当前时间。最后,您将发现代码中似乎占用了最多时间的一部分。</p>
<p>经验会告诉你,I/O(比如从磁盘读取,或者通过internet访问资源)比内存计算要花更长的时间。我对这个问题的猜测是,您使用一个HTTP连接来获取拖缆列表,然后使用一个HTTP连接来获取该拖缆的状态。假设有10000个拖缆:您的程序在完成之前需要建立10001http连接。</p>
<p>如果真是这样的话,有几种方法可以解决这个问题:</p>
<ul>
<li>查看Twitch.TV的API中是否有其他选项,允许您检索流模式用户的列表,这样就不需要为每个流调用API。</li>
<li>缓存结果。这实际上不会帮助您的程序在第一次运行时运行得更快,但是您可以使它在一分钟内再次运行,从而可以重用结果。</li>
<li>将应用程序限制为一次只处理几个拖缆。如果有10000个拖缆,那么您的应用程序到底做了什么?它确实需要查看所有10000个拖缆的模式?也许最好是抓住前20名,此时用户可以按一个键获得下20名,或者关闭应用程序。通常,编程不仅仅是编写代码,而是管理用户的期望。这似乎是一个宠物项目,所以可能没有“用户”,这意味着你有自由支配权来改变应用程序的功能。</li>
<li>使用多个连接。现在,你的应用程序与服务器建立一个连接,等待结果返回,分析结果,保存结果,然后开始下一个连接。这个过程可能需要半秒钟。如果有250个拖缆,则为每个拖缆运行此过程总共需要两分钟多一点的时间。然而,如果你一次能跑四次,你可能会把你的时间减少到总共不到30秒。查看<a href="http://docs.python.org/2/library/multiprocessing.html" rel="nofollow">multiprocessing</a>模块。请记住,某些API可能会限制您在某个时间可以建立多少个连接,因此一次使用50个连接来攻击它们可能会使它们厌烦,并导致它们禁止您访问它们的API。注意这里。</li>
</ul>