Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php/mysql可以';不要同时运行同一文件两次_Php_Mysql_Centos_Server - Fatal编程技术网

php/mysql可以';不要同时运行同一文件两次

php/mysql可以';不要同时运行同一文件两次,php,mysql,centos,server,Php,Mysql,Centos,Server,我试图让一个“机器人”做一些数据处理,但不知道如何运行同一个文件两次,并加快处理同一文件的多个进程 我的代码: while($stop != 1){ $result = $mysqli->query("SELECT * FROM `data` WHERE `state` = 'nothing' ORDER BY `id` DESC"); $row = $result->fetch_assoc(); if(empty($row)){ echo

我试图让一个“机器人”做一些数据处理,但不知道如何运行同一个文件两次,并加快处理同一文件的多个进程

我的代码:

while($stop != 1){

    $result = $mysqli->query("SELECT * FROM `data` WHERE `state` = 'nothing' ORDER BY `id` DESC");
    $row = $result->fetch_assoc();

    if(empty($row)){
        echo $i." stop";
        $stop = 1;
    }else{
        echo "do ".$i."<br/>";
        $mysqli->query("UPDATE `data` SET `state` = 'done' WHERE `id` = '{$row['id']}'");
    }

    $i++;
}
(数据库中大约有3000行)

但是,如果我第二次运行同一个文件,它什么也不做,只是等待另一个文件完成,然后只写“1 stop”,这意味着即使我同时启动这些文件,它也没有做任何事情

我注意到,如果我同时启动两个文件并取消第一个文件的执行,那么第二个文件仅从1个id开始,即使有500行已经处于
状态
='nothing'

这让我现在明白了。。。这是php还是mysql的问题?如何使一个文件运行两次处理不同的数据而不像这样挂断

CentOS 6.6版(最终版)

PHP 5.3.28(cli)(构建时间:2014年7月21日12:19:25)

尝试使用不同的查询 例:

localhost/a.php?进程=1

localhost/a.php?进程=2


这将使您的文件在同一时间运行两次

您的mysql表在更新过程中被锁定您需要进行读取,特别是如果您的表使用MyISAM引擎。作为之前两条注释的补充,两个程序可以同时执行选择(我不认为读取锁定ressource),因此它们都将具有所有行。然后,如果你停止一个,第二个将不会更新关于他所做选择的知识。所以他还是会穿过所有的行。。。为了避免这种情况,您还可以在更新之前检查数据状态,以查看在选择之后是否已被其他程序捕获…我正在使用MyISAM,切换到InnoDB帮助会不会?我无法真正避免更新表,因为脚本需要查看哪些数据已被处理@这就是你说的吗?用一个代码更新了第一篇帖子我刚才说的是if条件,你不必在
else
中更新
$result
$row
,这对性能来说会很有戏剧性。
do 1
do 2
do 3
do 4
do 5
do 6
do 7
+-------------------------+------------------------------+
| Variable_name           | Value                        |
+-------------------------+------------------------------+
| protocol_version        | 10                           |
| slave_type_conversions  |                              |
| version                 | 5.5.38                       |
| version_comment         | MySQL Community Server (GPL) |
| version_compile_machine | x86_64                       |
| version_compile_os      | Linux                        |
+-------------------------+------------------------------+