PHP:分开5个并行任务

时间:2013-08-03 00:18:12

标签: php concurrency fork pcntl

我使用外部API来收集对象的数据。外部API的结构方式,我必须对API的不同部分进行5次单独调用,以获得我需要的所有数据。

到目前为止,我一直按顺序执行此操作,但每次迭代需要大约5秒钟,这使得在处理多​​个对象时需要等待很长时间。

我想要做的是将5个任务分配给单独的进程,让它们各自联系API,然后使用它们的数据集部分更新数组。

我正在看pcntl_ *函数来做这件事,但是我不确定最佳做法是什么才能有效地做到这一点。

基本上,验证对象数据是否存在于远程系统中,我希望并行调用五个函数。 Func1 - func5,每个都传递了对象的ID,我想某种方式可以指示进程需要执行的5个操作中的哪一个。

调度procs并且父级等待直到所有五个返回,并将其结果添加到全局数组。

此时,父节点将数组发送回请求者并终止。在伪代码中,我认为处理分叉的函数会起到这样的作用:

function LoadObjectData( $oid ) {
    $data = array();

    // fork our individual operations on the object
    forkit( $oid, FUNC_ONE, &$data );
    forkit( $oid, FUNC_TWP, &$data );
    forkit( $oid, FUNC_THREE, &$data );
    forkit( $oid, FUNC_FOUR, &$data );

    waitForForksToFinish();

    return $data;
}

第二个论点是儿童需要做哪些功能的某种指标,我认为这只是文件中的4个其他功能。

pcntl_ *是最好的方法吗? 这是代码的最佳结构吗? 需要哪些实际的pcntl_ *调用?

感谢。

0 个答案:

没有答案