robsonalvesbh / semaphoro
此包的最新版本(v1.0.1)没有提供许可信息。
此库可以帮助您使用PHP运行多个进程。
v1.0.1
2019-01-29 00:43 UTC
Requires (Dev)
- m6web/redis-mock: ~2.0
- phpunit/phpunit: ^7.5
- predis/predis: ^1.1
This package is auto-updated.
Last update: 2024-09-29 05:02:23 UTC
README
Semaphoro
此库可以帮助您使用PHP运行多个进程。
Semaphoro库通过避免两个或更多并行运行的工人执行相同的进程,从而对进程进行编排,避免进程重复,并在某些进程失败时仍有再次处理进程的应急措施。
如何使用
设置存储
参数
- Predis/Client $redisClient - 必需
- 字符串 $prefix - 可选(默认值:semaphoro)
prefix 是Redis的命名空间。
$redis = new Redis($redisClient, $prefix);
设置处理器
参数
- StorageInterface $storage - 必需
- 整数 $rangeLength - 可选(默认值:50)
rangeLength 是范围内的进程数量
$rangeHandler = new RangeHandler($storage, $rangeLength);
RangeHandler旨在与增量数字(如ID)一起工作
获取信号量
参数
- HandlerInterface $handler - 必需
$semaphoro = new Semaphoro($handler);
方法
getAvailableProcess()
获取下一个可用范围
$semaphoro->getAvailableProcess();
返回
- ProcessInterface
setUnprocessed()
当发生错误时设置未处理状态
参数
- ProcessInterface $process - 必需
$semaphoro->setUnprocessed($process);
返回
- void
remove()
当进程完成后从信号量中删除进程
参数
- ProcessInterface $process - 必需
$semaphoro->remove($process);
返回
- void
代码示例
<?php require_once 'vendor/autoload.php'; use Predis\Client; use Semaphoro\Handlers\RangeHandler; use Semaphoro\Semaphoro; use Semaphoro\Storages\Redis; $redis = new Redis(new Client([ 'scheme' => 'tcp', 'host' => 'redis', 'port' => 6379, ])); $rangeHandler = new RangeHandler($redis); $semaphoro = new Semaphoro($rangeHandler); $process = $semaphoro->getAvailableProcess(); try { /** * YOUR CODE HERE */ $semaphoro->remove($process); } catch (Throwable $e) { $semaphoro->setUnprocessed($process); }