axxapy / easyfork
The easiest way to manage work for php (uses pcntl library)
v0.10.3
2024-04-19 07:24 UTC
Requires
- php: ^8.2
- ext-json: *
- ext-pcntl: *
- ext-posix: *
Requires (Dev)
- phpunit/phpunit: ^11
Suggests
- ext-apcu: *
- ext-memcached: *
- ext-sockets: *
README
Create signle fork and read it's result:
$proc = (new Fork(job: function(Process $proc) { $proc->shared_memory['job_is_done'] = true; }))->run(); var_dump($proc->shared_memory['job_is_done']); // null $proc->waitFor(); var_dump($proc->shared_memory['job_is_done']); // true
Downloaded multiple web pages in parallel:
$fork = new Fork(job: function(Process $proc, ...$args) { $url = $args[0]; $proc->shared_memory['result'] = file_get_contents($url); }); $procs = [ $fork->run('https://some-website.com/page1.html'), $fork->run('https://some-website.com/page2.html'), $fork->run('https://some-website.com/page3.html'), ]; // do some other job //when ready, read result: foreach ($procs as $proc) { $proc->waitFor(); echo $proc->shared_memory['result']; }
ForkPoolExecutor
$stop = false; $result = (new ForkPoolExecutor(job: function(Process $proc) use (&$stop) { $proc->shared_memory["fork_$this->id"] = 'result'; }))->run(); var_dump($result);