vatson / isolated-callback
允许在单独的进程中执行回调
1.0.1
2013-12-03 14:55 UTC
Requires
- php: >=5.3.2
- ext-pcntl: *
- ext-sysvsem: *
Requires (Dev)
- fp/fumocker: >=1.0-dev
- phpunit/phpunit: 3.7.*
This package is not auto-updated.
Last update: 2024-09-14 12:59:46 UTC
README
小巧但功能强大的工具,可以轻松进行分支。
隔离回调允许在分支中执行任何可调用语句,并避免内存泄漏。
安装
安装非常简单,多亏了Composer
composer require vatson/isolated-callback
或者将需求添加到您的composer.json文件中
{
"require": {
"vatson/isolated-callback": "*"
}
}
并运行update
composer update vatson/isolated-callback
使用方法
快速简单。让我们创建一些生成大量数据但结果较小的匿名函数
<?php include_once 'vendor/autoload.php'; use Vatson\Callback\IsolatedCallback; $cb = function() { return array_slice(range(1, 100000), rand(1,100), rand(1,10)); }; $icb = new IsolatedCallback($cb); $random_slice = $icb();
就是这样。您的回调将在单独的分支中运行,并将结果发送到主进程。
回调参数
注意,您可以使用参数调用它,并使用lambda函数绑定一些局部变量。
<?php include_once 'vendor/autoload.php'; use Vatson\Callback\IsolatedCallback; $slice_length = rand(1,5); $cb = function($max_range) use($slice_length) { return array_slice(range(1, $max_range), rand(1,$max_range), $slice_length); }; $icb = new IsolatedCallback($cb); $random_slice = $icb(1000);
对象作为结果
您还可以发送不仅仅是标量,还可以发送简单的对象(POPO)。记住,基于或包含Resources
的对象不能作为结果序列化。
<?php use Vatson\Callback\IsolatedCallback; $cb = function() { $popo_object = new \stdClass(); $popo_object->property = 'value'; return $popo_object; }; $icb = new IsolatedCallback($cb); $property = $icb()->property;
限制
请注意,当前实现使用System V IPC在进程之间共享结果。传输的数据量取决于您的系统配置。最佳实践是发送简短而简洁的结果。
需求
-
PHP >= 5.3.2
-
进程控制(《PCNTL》)- 允许进行分支
-
System V IPC(《semaphore》)- 添加了在分布式进程之间共享结果的能力
-
[可选] Fumocker - 模拟php的内置函数
-
[可选] PHPUnit 3.5+ 执行测试套件
作者
许可
Isolated Callback在MIT许可条款下分发 - 有关详细信息,请参阅LICENSE
文件