如何在php中进行多线程处理


how can i do multithreading in php

我正在尝试重写我的代码以支持多线程,这是一个简单的代码,但我不知道如何做到,基本上它所做的是

  1. 使用curl-->请求第一个网页以获得唯一的id
  2. 使用唯一id请求另一个页面-->以获取会话
  3. 使用会话请求另一个页面--->sleep(),然后重试

现在这是单个线程所做的,但我想在同一时间创建许多线程

我所做的是,创建3个sperate文件

第一个创建了10个会话,并将它们与其他参数(session1|unique_id1|paramter1|anotherparameter1)一起保存在txt文件中

第二个文件包含此代码

$sessions = file('sessions.txt');
$WshShell = new COM("WScript.Shell");
foreach($sessions as $kk => $session) {
  if (!empty($session)) {
    $oExec = $WshShell - > Run("php requests.php $kk", 0, false);
  }
}

它打开txt文件,每行打开一个带有argv 中行号的请求文件

在第三个文件中,它获取行号,打开会话文件,检索会话的参数,并使用该会话发送请求

这就是我的多线程处理方式,但我觉得我用rocks编写了php代码现在我想重写它,而不必打开10 sperate php进程

在PHP中确实没有原生的线程处理方法。你采取的方法是有效的,但我会采取不同的方法。在PHP中分叉进程是可能的。我已经做到了,而且效果很好。

一种方法是使用一些消息传递系统,如RabbitMQ,并以这种方式分发工作。基本上是演员或酒吧的子模型。

另一种可能对您有效的方法是"pthreads"。http://php.net/manual/en/book.pthreads.php

我自己没有尝试过这种方法,所以我无法向您详细说明它的效果或不效果。

希望这能有所帮助!