У меня есть процесс CLI, который использует ReactPhp \ childProcess для создания параллельных процессов, в среднем 600 из них, но может быть больше.
Каждый процесс условной выполняет операции A, B, C ... z , каждая операция имеет свои пределы выполнения, I.E. a = 10, b = 15 loop->addTimer(30, function() use ($process) {
$process->start($this->loop);
});
});
$process->start($this->loop);
}
$this->loop->run();
}
}
< /code>
worker.php
// Class Worker CLI command
class WorkerCmd
{
public function action(int $id)
{
$worker = ... // get some worker info by $id;
$operations = $worker->getOperations(); // get list of 'A', 'B'... 'Z' operation how this worker can solve
$redis = new \Redis(/* connection info */);
/**
* $operationName look like string, example 'A'
* $operationData look like array:
* [
* 'throttle_cnt' => 15,
* ...
* ]
*/
foreach ($operations as $operationName => $operationData) {
... // some logic before reserved this operation
// Operation ready to reserve
// !!! WARNING This is "Bottleneck" Redis is to slow for meany workers and operation, need the alternative thing
$count = $redis->incr($operationName);
if ($count > $operationData['throttle_cnt']) {
$redis->decr($operationName);
continue;
}
// Some logic with execution this operation
$operationName($operationData);
$redis->decr($operationName);
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... -processes