sparallel / laravel
Parallel PHP via processes for Laravel
dev-master
2025-06-15 18:54 UTC
Requires
- php: ^8.2
- laravel/framework: ^9.0 | ^10.0 | ^11.0 | ^12.0
- sparallel/sparallel: dev-master
Requires (Dev)
- orchestra/testbench: ^9.13
- phpstan/phpstan: ^2.1
- phpunit/phpunit: ^11.5
This package is auto-updated.
Last update: 2025-06-15 18:55:00 UTC
README
APP
# sparallel ## one of: sync, server SPARALLEL_MODE=sync SPARALLEL_SERVER_HOST=localhost SPARALLEL_SERVER_PORT=18077 SPARALLEL_LOG_CHANNEL=null SPARALLEL_SERVER_BIN_PATH=sparallel-server
php artisan vendor:publish --tag=sparallel-laravel
SERVER
load the bin file
php artisan sparallel:server:load
.env.sparallel
# PID SERVER_PID_FILE_PATH=storage/sparallel/sparallel-pid # RPC RPC_PORT=18077 # logging LOG_DIR=storage/sparallel/logs # any,debug,info,warn,error LOG_LEVELS=any LOG_KEEP_DAYS=3 SERVE_PROXY=false SERVE_WORKERS=true WORKER_COMMAND="php -d memory_limit=512M vendor/bin/sparallel-worker-e104f" MIN_WORKERS_NUMBER=5 MAX_WORKERS_NUMBER=10 WORKERS_NUMBER_SCALE_UP=5 WORKERS_NUMBER_PERCENT_SCALE_UP=80 WORKERS_NUMBER_PERCENT_SCALE_DOWN=50
.gitignore
.env.sparallel storage/sparallel/* sparallel-server
start server
sparallel-server --env=.env.sparallel start
example
Init
$workers = app(\SParallel\SParallelWorkers::class); $callbacks = [ 'first' => static fn() => 'first', 'second' => static fn() => throw new RuntimeException('second'), 'third' => static function( \SParallel\Entities\Context $context, \Illuminate\Contracts\Events\Dispatcher $dispatcher // DI support ) { $context->check(); return 'third'; }, ];
Wait all tasks to finish and get results
/** * @var \SParallel\SParallelWorkers $workers * @var array<string, Closure> $callbacks */ $results = $workers->wait( callbacks: $callbacks, timeoutSeconds: 2, ); if ($results->hasFailed()) { foreach ($results->getFailed() as $key => $failedResult) { echo "$taskKey: ERROR: " . ($failedResult->error?->message ?: 'unknown error') . "\n"; } } foreach ($results->getResults() as $result) { if ($result->error) { continue; } echo "$taskKey: SUCCESS: " . $result->result . "\n"; }
Run tasks and get results at any task completion
/** * @var \SParallel\SParallelWorkers $workers * @var array<string, Closure> $callbacks */ $results = $workers->run( callbacks: $callbacks, timeoutSeconds: 2, ); foreach ($results as $taskKey => $result) { if ($result->error) { echo "$taskKey: ERROR: " . ($result->error->message ?: 'unknown error') . "\n"; continue; } echo "$taskKey: SUCCESS: " . $result->result . "\n"; }