并行执行多个PHP脚本

时间:2015-11-19 19:51:40

标签: php mysql curl cron

我必须执行100多个PHP脚本并行执行,每个php脚本在数据库中插入新数据并更新以前的记录。

例如,每个脚本网址都是这样的:

example.com/update.php?data-from-project-1.com
example.com/update.php?data-from-project-2.com
example.com/update.php?data-from-project-2.com
所以...

更新页面的工作方式如下:
Update.php

<?php
//insert some new records from project data
//update some records
?>

我正在尝试:
Cron JOB PAGE:

$urls=array("data-from-project-2.com", "data-from-project-2.com",....)
for ($index = 0; $index < count($urls); $index++) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "update.php?$urls[$index]");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch); }

但我想这会按顺序执行所有页面,也会产生超时问题。无论如何通过cron作业页面并行执行它们。我不需要任何输出,他们只需要更新数据库。任何帮助,将不胜感激。感谢

3 个答案:

答案 0 :(得分:0)

我喜欢假装这是我的回复,但SO的答案应该涵盖它。

Executing multiple PHP scripts in parallel, and being notified when finished

答案 1 :(得分:0)

使用Php Thread。简单的例子:

<?php

class workerThread extends Thread {
public function __construct($i){
  $this->i=$i;
}

public function run(){
  while(true){
   echo $this->i;
   sleep(1);
  }
}
}

for($i=0;$i<50;$i++){
$workers[$i]=new workerThread($i);
$workers[$i]->start();
}

?>

您可以在每个线程中编写每个更新。但我建议你为每个线程创建一些批次。因为每个线程也使用一些时间来启动。 或者每个线程可以使用全局数组变量“urls”的某些部分(start_index,end_index)

答案 2 :(得分:0)

您可以使用PHP的curl_multi_init()异步处理您的任务。

I highly recommend this tutorial