<blockquote>
<p>is possible to the interval between the data be 1 second every time?</p>
</blockquote>
<p>理论上是的,但在实践中,有太多超出你控制范围的因素更有可能成为阻碍。其中包括但不限于:</p>
<ol>
<li>操作系统内核的任务调度器</li>
<li>相对于其他任务的优先级</li>
<li>系统总负荷</li>
<li>表中已有的数据量(检查二叉树的时间复杂性)</li>
</ol>
<p>这意味着,即使您的系统大部分时间处于空闲状态,<code>time.sleep(1)</code>也不能保证始终睡眠1秒,即使这样,系统也可能在做其他事情(例如,更多的I/O),并且每次执行相同操作需要不同的时间量。在</p>
<p>另外,不要每次在循环内都创建一个<em>新的</em>连接,您应该保持连接打开并节省开销。在</p>
<blockquote>
<p>What am i doing wrong?</p>
</blockquote>
<p>我不认为你在这里做了什么特别的错事。代码看起来不错,<strong>除了每次创建新连接的额外开销之外,<em>不应该</em>。除此之外,这里的问题归结为你无法控制的因素。在</p>
<p>也就是说,你可以做一些事情来提高你的机会。在</p>
<hr/>
<h2>一些改进性能的附加建议</h2>
<h3>存储引擎</h3>
<p>除了避免在每次迭代时打开/关闭数据库连接的开销外,还应该检查用于表的存储引擎。例如,根据您的MySQL版本,默认值可能仍然是<code>MyISAM</code>,这需要<em>table</em>锁才能写入。在</p>
<p>相比之下,<code>InnoDB</code>在写入表时只需要<em>行</em>锁定,如果其他人正在使用该表,这应该会有所改善。如果发现没有使用<code>InnoDB</code>,请发出<code>alter table ...</code>查询来更改存储引擎。在</p>
<h3>自动提交而不是事务</h3>
<p>事务意味着将两个或多个查询的<em>集合</em>组合为一个单元,但您提交的是单个<em>查询。相反,您应该将MySQL配置为启用自动提交,这样它就不必在提交和执行查询之后等待显式的<code>commit</code>请求,从而节省服务器和客户机之间的一些通信开销。在</p>
<h3>通过增加优先级来影响操作系统调度程序</h3>
<p>您可以为您的程序设置更高的优先级,以便调度程序在这里更有用。它也可能有助于对数据库服务/进程执行相同的操作。在</p>
<p>其他<em>用户</em>级别的任务也可以在必要时降低优先级。在</p>