【问题标题】:Executing Multiple php scripts in Parallel并行执行多个 php 脚本
【发布时间】:2015-11-20 04:44:54
【问题描述】:

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

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

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 作业页面:

$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作业页面并行执行它们。我不需要任何输出,他们只需要更新数据库。任何帮助,将不胜感激。谢谢

【问题讨论】:

    标签: php mysql curl cron


    【解决方案1】:

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

    I highly recommend this tutorial

    【讨论】:

      【解决方案2】:

      我很想假装这是我的回复,但 SO 的这个回答应该涵盖它。

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

      【讨论】:

        【解决方案3】:

        使用 PHP 线程。简单例子:

        <?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)

        【讨论】:

          猜你喜欢
          • 2013-04-26
          • 1970-01-01
          • 1970-01-01
          • 2016-09-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多