我正在Python 3.6中运行一个脚本,以实质上遍历文件路径并提取与两个数据集相对应的.dbf文件(通过for-loop),然后将其用于比较。在此for循环中,特定列将转换为数字类型,尽管在将.dbf作为数据帧处理后,它还会删除重复的行,但由于空字符串,尽管它仍为数字,但通常仍为字符串格式。明确地说,这是
<?php
$conn = mysqli_connect("localhost", "root", '');
mysqli_select_db($conn, "appletree");
$result = mysqli_query($conn, "SELECT * FROM wiki");
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<article>
<?php
if(empty($_GET['name']) === false ) {
$sql = "SELECT * FROM wiki WHERE name='".$_GET['name']."'";
$result = mysqli_query($conn, $sql);
$row = mysqli_fetch_assoc($result);
echo $row['main'];
}else{
echo "MBP wiki 는 php기반 위키입니다";
}
?>
</article>
</body>
</html>
这按预期工作。但是,当for循环运行了500次以上的迭代时,这些行的报告运行时间似乎随着迭代计数器线性增加,并且执行所需的时间大致相同(两者之和显示为{{ 3}})。这个问题只会随着时间的流逝而发生:当我们停止循环并中途重新启动它时,这些行的运行时间会减少到应有的水平,然后又开始以线性方式增加。
已确认这些是增加总体运行时间的代码行-它将在0.1秒左右开始,但是在600次迭代之后需要45秒。我曾尝试搜索有关Pandas函数的已知问题,但这种行为无济于事。两个功能花费大约相同的时间并以相同的速率增加,这特别有趣。有人知道为什么发生此问题吗?
我尝试在每次迭代结束时清除数据帧,并执行垃圾回收,并密切注意内存使用情况。当前正在16GB的计算机上运行,并且未达到内存限制。暂时的解决方法是手动调整for循环范围并分别执行两次运行,这是不理想的。