如何在不使用任何扩展名的情况下在php中并行运行方法?

时间:2020-04-19 11:30:54

标签: php amphp

是否可以在不使用pthreadpcntl之类的扩展名的情况下并行运行两个方法?

我尝试了Symfony/Process,但似乎只能将其用于php cli编程。

我的要求是 php Web应用程序。我发现amphp/parallel表示无需任何扩展名即可使用。我尝试了以下示例。虽然我不知道该库是否提供了真正的并行功能或其他诸如排队任务?因为下面注释“没有任何扩展,并行处理是不可能的”。

在尝试amphp/parallel之前,我想确定找到的库是否适合我的工作。假设我要并行运行两个方法test1()和test2(),并在下一行中使用这两个方法的结果。

    <?php

    require __DIR__ . '/../vendor/autoload.php';

    use Amp\Parallel\Worker;
    use Amp\Promise;

    $urls = [
        'https://secure.php.net',
        'https://amphp.org',
        'https://github.com',
    ];

    $promises = [];
    foreach ($urls as $url) {
        $promises[$url] = Worker\enqueueCallable('file_get_contents', $url);
    }

    $responses = Promise\wait(Promise\all($promises));

    foreach ($responses as $url => $response) {
        \printf("Read %d bytes from %s\n", \strlen($response), $url);
test1(){
   // do some database query
}

test2(){
  // run a lengthy for loop
}

0 个答案:

没有答案