Как запустить методы в Parallel в php без использования каких-либо расширений? - PullRequest
1 голос
/ 19 апреля 2020

Можно ли запустить два метода параллельно без использования какого-либо расширения, например pthread или pcntl?

Я пробовал Symfony / Process , но, похоже, я могу его использовать только для php Cli программирования.

Мое требование для php веб-приложения . Я нашел 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
}
...