0

我使用外部 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_* 调用?

谢谢。

4

0 回答 0