<> P>可以用C++或类似的方法重写部分内容,但是如果你的循环需要3秒来处理2000个左右的项目,那么我认为你可能会遇到一些严重的问题,而不是用Python本身固有的问题。在</p>
<p>因此,首先我想补充另一个答案/它的评论中提出的分析建议-这确实是最好的方法来告诉<em>你的循环中所有的时间都在哪里消失。有一些关于python <a href="http://docs.python.org/library/profile.html" rel="nofollow noreferrer">available here</a>提供的分析器的文档。在</p>
<p>其次,如果您使用的是标准的python发行版,那么如果可能的话,我会考虑远离线程。python的默认实现有一个<a href="http://wiki.python.org/moin/GlobalInterpreterLock" rel="nofollow noreferrer">global interpreter lock</a>,它可以阻止任何解释过的python代码真正并行运行,从而消除了很多首先要处理线程的优点(在某些情况下,实际上会使事情变得更慢)</p>
<p>第三,我可以就你发布的代码提供一些小建议。您最好还是使用探查器来确认我的怀疑(并找到我没有注意到的问题区域—看起来您有很多代码),但我认为这至少会有帮助:</p>
<p>在for循环<code>for thing in Thing.List.values():</code>中,最好调用<code>Thing.List.itervalues()</code>。这将返回值的迭代器,而不是分配一个完整的值列表。分配列表是不必要的,除非你计划在迭代时添加或删除字典,而且如果你所暗示的dict中有大约2000个条目,那么分配列表可能不会太快。这个建议也适用于在代码中迭代字典的其他时候,假设您不打算在迭代时添加/删除条目(使用<code>.iteritems()</code>而不是{<cd4>},<code>.iterkeys()</code>而不是{<cd6>})。在</p>
<p>您可能还需要研究一种不同于每次迭代调用<code>time.sleep</code>的计时方法。我可以看到两个问题-主要是<code>time.sleep(.1)</code>实际上不能保证睡眠持续0.1秒,还有一个原因是它没有考虑处理所需的时间长度。例如,假设你的处理用了0.05秒,然后你睡了0.1秒,那么时间间隔实际上是0.15秒-而且这个间隔只会随着处理变得更加激烈而增大。我没有任何具体的建议,但是在向<code>time.sleep</code>传递一个数字时,至少要考虑处理时间</p>
<p>最后,您可能需要考虑在某个时刻使用<a href="https://codereview.stackexchange.com/">code review stack exchange</a>。我不认为有人会想审查你的整个游戏引擎,但它似乎是一个好地方,可以放置你的代码块,你可能需要反馈,或你认为可以改进。在</p>