我在Linux系统上同时运行了10个PHP脚本,并且它们正在后台处理。
例如:
while ($i <=10) {
exec("/usr/bin/php-cli run-process.php > /dev/null 2>&1 & echo $!");
sleep(10);
$i++;
}
在
run-process.php
中,我遇到了数据库循环的问题。可能已经有一个进程将status
字段更新为1,但似乎其他php脚本进程没有看到它。例如:$SQL = "SELECT * FROM data WHERE status = 0";
$query = $db->prepare($SQL);
$query->execute();
while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
$SQL2 = "SELECT status from data WHERE number = " . $row['number'];
$qCheckAgain = $db->prepare($SQL2);
$qCheckAgain->execute();
$tempRow = $qCheckAgain->fetch(PDO::FETCH_ASSOC);
//already updated from other processs?
if ($tempRow['status'] == 1) {
continue;
}
doCheck($row)
sleep(2)
}
如何确保进程不会再次处理相同的数据?
prepare()
只会增加不必要的开销。相反,您可以使用$db->exec($SQL);
。 - Michael Mior