동시에 10 개의 PHP 스크립트를 실행 중이며 Linux의 백그라운드에서 처리합니다. 예를 들어동시에 여러 PHP 스크립트 실행 (데이터베이스 루프 문제)
다음 run-process.php
에서
while ($i <=10) {
exec("/usr/bin/php-cli run-process.php > /dev/null 2>&1 & echo $!");
sleep(10);
$i++;
}
, 나는 데이터베이스 루프에 문제가 있습니다. 프로세스 중 하나가 이미 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)
}
프로세스가 동일한 데이터를 다시 처리하지 않도록하려면 어떻게합니까?
mysql 트랜잭션을 사용해보십시오. 예 : http://stackoverflow.com/questions/2708237/php-mysql-transactions-examples –
쿼리에 매개 변수가없는 경우'prepare() '를 호출하면 불필요한 오버 헤드가 추가됩니다. 대신 $ db-> exec ($ SQL);을 사용할 수 있습니다. –