Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
MIT License

Copyright (c) 2020 Cees-Jan Kiewiet
Copyright (c) 2025 Cees-Jan Kiewiet

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ $factory = (new Factory($loop))->withMetrics(Metrics::create($registry));

## License ##

Copyright 2024 [Cees-Jan Kiewiet](http://wyrihaximus.net/)
Copyright 2025 [Cees-Jan Kiewiet](http://wyrihaximus.net/)

Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
Expand Down
31 changes: 11 additions & 20 deletions examples/colours.php
Original file line number Diff line number Diff line change
@@ -1,16 +1,10 @@
<?php

declare(strict_types=1);

use PackageVersions\Versions;
use React\EventLoop\Factory;
use React\EventLoop\Loop;
use ReactParallel\Factory as ParallelFactory;
use ReactParallel\ObjectProxy\Generated\Proxies\WyriHaximus\Metrics\Registry as RegistryProxy;
use WyriHaximus\Metrics\Label;
use function React\Promise\all;
use WyriHaximus\React\Parallel\Finite;
use function WyriHaximus\iteratorOrArrayToArray;
use WyriHaximus\React\Parallel\ReturnThread;
use WyriHaximus\React\Parallel\FiniteWorker;
use function React\Async\async;

$options = getopt(
'',
Expand All @@ -22,26 +16,23 @@

require dirname(__DIR__) . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php';

$loop = Factory::create();
echo 'Loop: ', get_class($loop), PHP_EOL;
echo 'Loop: ', Loop::get()::class, PHP_EOL;

$parallelFactory = new ParallelFactory($loop);
$parallelFactory = new ParallelFactory();
$pool = $parallelFactory->lowLevelPool();

$loop->futureTick(static function () use ($pool, $options): void {
foreach (range(0, 7) as $i) {
$pool->run(static function (int $index, int $iterations, bool $delay): int {
foreach (range(0, 7) as $i) {
Loop::futureTick(async(static function () use ($i, $pool, $options): void {
$pool->run(static function (int $index, int $iterations, bool $delay): bool {
for ($i = 0; $i < $iterations; $i++) {
if ($delay) {
usleep($i * 3.3);
usleep((int) ($i * 0.3));
}
echo "\033[" . (30 + $index) . ";" . (40 + $index) . "m.\033[0m";
}
return true;
}, [$i, (int)$options['iterations'], isset($options['delay'])]);
}
});
}));
}

echo PHP_EOL, 'Loop::run()', PHP_EOL;
$loop->run();
echo PHP_EOL, 'Loop::done()', PHP_EOL;
40 changes: 20 additions & 20 deletions examples/exception.php
Original file line number Diff line number Diff line change
@@ -1,26 +1,26 @@
<?php

declare(strict_types=1);

use PackageVersions\Versions;
use React\EventLoop\Factory;
use WyriHaximus\React\Parallel\Finite;
use React\EventLoop\Loop;
use ReactParallel\Factory as ParallelFactory;
use function React\Async\async;

require dirname(__DIR__) . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php';

$loop = Factory::create();

$finite = new Finite($loop, 1);

$finite->run(function () {
throw new RuntimeException('Whoops I did it again!');

return 'We shouldn\'t reach this!';
})->done(function ($versions) use ($finite) {
var_export($versions);

$finite->close();
});

echo 'Loop::run()', PHP_EOL;
$loop->run();
echo 'Loop::done()', PHP_EOL;
$parallelFactory = new ParallelFactory();
$pool = $parallelFactory->limitedPool(1);

Loop::futureTick(async(static function () use ($pool): void {
try {
$pool->run(static function () {
throw new RuntimeException('Whoops I did it again!');

return 'We shouldn\'t reach this!';
});
} catch (Throwable $error) {
echo $error, PHP_EOL;
} finally {
$pool->close();
}
}));
25 changes: 0 additions & 25 deletions examples/http.php

This file was deleted.

41 changes: 21 additions & 20 deletions examples/json.php
Original file line number Diff line number Diff line change
@@ -1,39 +1,40 @@
<?php

declare(strict_types=1);

use React\EventLoop\Factory;
use React\EventLoop\Loop;
use ReactParallel\Factory as ParallelFactory;
use function React\Async\async;
use function React\Async\await;
use function React\Promise\all;
use WyriHaximus\React\Parallel\Finite;

$json = file_get_contents(__DIR__ . DIRECTORY_SEPARATOR . 'large.json');

require dirname(__DIR__) . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php';

$loop = Factory::create();
$parallelFactory = new ParallelFactory();
$pool = $parallelFactory->limitedPool(150);

$finite = new Finite($loop, 150);
$signalHandler = function () use ($pool, &$signalHandler) {
Loop::removeSignal(SIGINT, $signalHandler);
$pool->close();
};
Loop::addSignal(SIGINT, $signalHandler);

$promises = [];
foreach (range(0, 5000) as $i) {
$promises[] = $finite->run(function($json) {
$promises[] = async(static fn(): string => $pool->run(function($json) {
$json = json_decode($json, true);
return md5(json_encode($json));
}, [$json]);
}, [$json]))();
}

$signalHandler = function () use ($finite, $loop) {
$loop->stop();
$finite->close();
};
all($promises)->then(function ($v) {
var_export($v);
})->always(function () use ($finite, $loop, $signalHandler) {
$finite->close();
$loop->removeSignal(SIGINT, $signalHandler);
})->done();

$loop->addSignal(SIGINT, $signalHandler);
Loop::futureTick(async(static function () use ($promises, $signalHandler): void {
try {
var_export(await(all($promises)));
} finally {
$signalHandler();
}
}));

echo 'Loop::run()', PHP_EOL;
$loop->run();
echo 'Loop::done()', PHP_EOL;
43 changes: 22 additions & 21 deletions examples/sleep.php
Original file line number Diff line number Diff line change
@@ -1,45 +1,46 @@
<?php

declare(strict_types=1);

use React\EventLoop\Factory;
use WyriHaximus\React\Parallel\Finite;
use React\EventLoop\Loop;
use ReactParallel\Factory as ParallelFactory;
use function React\Async\async;
use function React\Async\await;
use function React\Promise\all;
use function WyriHaximus\iteratorOrArrayToArray;

require dirname(__DIR__) . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php';

$loop = Factory::create();
$parallelFactory = new ParallelFactory();
$pool = $parallelFactory->limitedPool(100);

$finite = Finite::create($loop, 100);

$timer = $loop->addPeriodicTimer(1, function () use ($finite) {
var_export(iteratorOrArrayToArray($finite->info()));
$timer = Loop::addPeriodicTimer(1, function () use ($pool) {
var_export([...$pool->info()]);
});

$promises = [];
foreach (range(0, 250) as $i) {
$promises[] = $finite->run(function($sleep) {
$promises[] = async(static fn(): int => $pool->run(static function($sleep): int {
sleep($sleep);
return $sleep;
}, [random_int(1, 13)])->then(function (int $sleep) use ($i) {
}, [random_int(1, 13)]))()->then(function (int $sleep) use ($i): int {
echo $i, '; ', $sleep, PHP_EOL;

return $sleep;
});
}

$signalHandler = function () use ($finite, $loop) {
$loop->stop();
$finite->close();
$signalHandler = function () use ($pool) {
Loop::stop();
$pool->close();
};
all($promises)->then(function ($v) use ($finite, $loop, $signalHandler, $timer) {
$finite->close();
$loop->removeSignal(SIGINT, $signalHandler);
$loop->cancelTimer($timer);
})->done();

$loop->addSignal(SIGINT, $signalHandler);
Loop::futureTick(async(static function () use ($promises, $signalHandler, $pool, $timer) {
await(all($promises));
$pool->close();
Loop::removeSignal(SIGINT, $signalHandler);
Loop::cancelTimer($timer);
}));

Loop::addSignal(SIGINT, $signalHandler);

echo 'Loop::run()', PHP_EOL;
$loop->run();
echo 'Loop::done()', PHP_EOL;
36 changes: 0 additions & 36 deletions examples/thread.php

This file was deleted.

21 changes: 0 additions & 21 deletions examples/timer.php

This file was deleted.

48 changes: 25 additions & 23 deletions examples/versions.php
Original file line number Diff line number Diff line change
@@ -1,29 +1,31 @@
<?php

declare(strict_types=1);

use PackageVersions\Versions;
use React\EventLoop\Factory;
use WyriHaximus\React\Parallel\Finite;
use function WyriHaximus\iteratorOrArrayToArray;
use Composer\InstalledVersions;
use React\EventLoop\Loop;
use ReactParallel\Factory as ParallelFactory;
use function React\Async\async;

require dirname(__DIR__) . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php';

$loop = Factory::create();

$finite = Finite::create($loop, 2);

$timer = $loop->addPeriodicTimer(1, function () use ($finite) {
var_export(iteratorOrArrayToArray($finite->info()));
});
$finite->run(function () {
return Versions::VERSIONS;
})->then(function ($versions) use ($finite, $loop, $timer) {
var_export($versions);

$finite->close();
$loop->cancelTimer($timer);
})->done();

echo 'Loop::run()', PHP_EOL;
$loop->run();
echo 'Loop::done()', PHP_EOL;
$parallelFactory = new ParallelFactory();
$pool = $parallelFactory->limitedPool(2);

Loop::futureTick(async(static function () use ($pool, $timer) {
var_export(
$pool->run(
static fn (): array => array_merge(
...array_map(
static fn (string $package): array => [
$package => InstalledVersions::getPrettyVersion($package),
],
InstalledVersions::getInstalledPackages(),
)
)
)
);

$pool->close();
Loop::cancelTimer($timer);
}));
Loading