J'ai un script qui lance successivement deux programmes dans des threads parallèles (avec PHP/parallel).
À la première itération du "foreach" tout se passe bien.
Lorsque le script lance le deuxième programme il y a un plantage indiquant qu'une variable n'est pas définie.
Je bloque !
Voici le script
<?php
/**
* Mise en abyme : parallel executing a parallel script
*
*/
use Concurrency\Pool;
require "config.php";
require __DIR__ . "/../../lib/Pool.php";
$tasks['singleQueue'] = function(array $config): array {
return require "singleQueue.php";
};
$tasks['multipleQueues'] = function(array $config): array {
return require "multipleQueues.php";
};
function generator(array $config) {
for ($i=1 ; $i <= $config['iterations_count']; $i++) {
yield [$config];
}
}
foreach ($tasks as $name => $task) {
//Create generator
$generator = generator($config);
$pool = new Pool(
concurrency: $config['simulate_threads_count'],
task: $task,
generator: $generator,
);
$pool->wait();
$results = $pool->getValues();
echo "== $name ==\n";
$count = count($results);
echo "Number of iterations: $count\n";
$column = array_column($results, 'clients_count');
$average_clients_count = round(array_sum($column) / $count, 1);
echo "Average clients count: $average_clients_count\n";
$column = array_column($results, 'total_duration');
$average_total_duration = round(array_sum($column) / $count);
echo "Average total duration: {$average_total_duration}s\n";
$column = array_column($results, 'max_wait_duration');
$average_max_wait_duration = round(array_sum($column) / $count);
echo "Average max wait duration: {$average_max_wait_duration}s\n";
$column = array_column($results, 'average_wait_duration');
$average_average = round(array_sum($column) / $count);
echo "Average average wait duration: {$average_average}s\n";
$simulation_duration = round($pool->getWaitDuration(), 1);
echo "Simulation duration: {$simulation_duration}s\n";
echo "\n";
}
Voici l'erreur :Code : Tout sélectionner
Fatal error: Uncaught TypeError: {closure}(): Argument #2 ($queue_channel) must be of type parallel\Channel, array given in /app/tutorial/example10/main.php:25
Stack trace:
#0 [internal function]: {closure}(Object(parallel\Channel), Array, Array)
#1 {main}
thrown in /app/tutorial/example10/main.php on line 25