Skip to content

Async Processing with PHP with no threads or reactive libs

License

Notifications You must be signed in to change notification settings

terremoth/php-async

Repository files navigation

PHP Async Process

Process functions or files asynchronously without needing AMP, ReactPHP, RxPHP, Fibers, Pthreads, Parallel, Revolt, Pcntl or Swoole.

Just raw PHP! It is magic!

codecov Test Coverage Psalm type coverage Psalm level Test Run Status Codacy Badge Maintainability License Packagist Downloads

It uses a combination of:

  • serializable-clojure lib
  • Symfony/Process lib
  • and PHP's native Shmop extension

Warning

it does not works on MSYS or MINGW terminals! However, It will work fine on both Windows (cmd and powershell) and Linux.

See demos/demo.php for examples.

Installation

composer require terremoth/php-async

Documentation

<?php

require_once 'vendor/autoload.php';

use Terremoth\Async\PhpFile;
use Terremoth\Async\Process;

$process = new Process();
$process->send(function () {
    /*
    // anything you want to process here
    // Important note: do not use closure vars, like:
    // $process->send(function () use ($var1, $var2, ...)  { ... });
    // since the closure will be processed in another file.
    // Write everything you want without outside dependencies here
    // In a future version I will create communications variables between both processes
    */
});

// Another way to use is if you want to just process a file Asynchronously, you can do this:
$args = ['--verbose', '-n', '123'];
$asyncFile = new PhpFile('existing-php-file.php', $args); // make sure to pass the correct file with its path
$asyncFile->run();

That's it!