Parallel

Parallel est un outil de planification de tâches en parallèle qui permet d'exécuter simultanément plusieurs tâches asynchrones dans un programme et de récupérer les résultats une fois que toutes les tâches sont terminées. Parallel est basé sur Barrier.

Attention
Le type de pilote est automatiquement détecté en dessous, uniquement les pilotes Swoole/Swow/Fiber sont pris en charge.

Avertissement
Cette fonctionnalité nécessite workerman>=5.1.0

<?php
use Workerman\Connection\TcpConnection;
use Workerman\Coroutine\Parallel;
use Workerman\Events\Swoole;
use Workerman\Protocols\Http\Request;
use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';

// Serveur Http
$worker = new Worker('http://0.0.0.0:8001');
$worker->eventLoop = Swoole::class; // Ou Swow::class ou Fiber::class
$worker->onMessage = function (TcpConnection $connection, Request $request) {
    $parallel = new Parallel();
    for ($i=1; $i<5; $i++) {
        $parallel->add(function () use ($i) {
            // Faire quelque chose
            return $i;
        });
    }
    $results = $parallel->wait();
    $connection->send(json_encode($results)); // Réponse : [1,2,3,4]
};
Worker::runAll();

Description de l'interface

interface ParallelInterface
{
    /**
     * Constructeur, $concurrent indique le nombre de tâches parallèles, -1 signifie qu'il n'y a pas de limite sur le nombre de tâches parallèles
     */
    public function __construct(int $concurrent = -1);

    /**
     * Ajouter une tâche parallèle
     */
    public function add(callable $callable, ?string $key = null): void;

    /**
     * Attendre que toutes les tâches soient terminées et renvoyer les résultats
     */
    public function wait(): array;

    /**
     * Obtenir les résultats des tâches ayant levé des exceptions
     */
    public function getExceptions(): array;
}