php-strict / cooperative-worker
用于在多个进程中执行一个任务列表的类
dev-master
2024-06-03 12:11 UTC
Requires
- php: >=7.1
Requires (Dev)
- codeception/codeception: ^4.1.4
- codeception/module-asserts: ^1.0.0
- codeception/module-phpbrowser: ^1.0.0
This package is auto-updated.
Last update: 2024-09-03 13:11:27 UTC
README
用于在多个进程中执行一个任务列表的类。该类不包含创建进程的机制,消费者必须自行创建。每个单独的进程可以创建类的实例,这些实例将使用共享存储而不发生冲突。作业(队列)的临时存储将在类的第一个实例中创建,并由所有实例使用。
要求
- PHP >= 7.1
安装
作为独立类使用
require 'CooperativeWorker.php'; use PhpStrict\CooperativeWorker\CooperativeWorker;
使用 Composer 安装
composer require php-strict/cooperative-worker
用法
之前(所有作业通过一个进程运行)
//$jobs - list of commands, files to processing, ... $jobs = ['job 1', 'job 2', 'job 3', 'job 4', 'job 5']; foreach ($jobs as $job) { echo 'Start job: ' . $job . PHP_EOL; //do some job }
使用协作工作者
cw.php
use PhpStrict\CooperativeWorker\CooperativeWorker; $cw = new CooperativeWorker( function() { return ['job 1', 'job 2', 'job 3', 'job 4', 'job 5']; }, function(string $job) { echo 'Start job: ' . $job . PHP_EOL; //do some job } ); $cw->run();
cw.bat(在Windows上使用 start
命令创建两个单独的进程)
start php -f cw.php start php -f cw.php
cw.sh(在Linux上使用 &
在命令末尾创建两个单独的进程)
php -f cw.php & php -f cw.php &
使用 ScriptRunner
use PhpStrict\ScriptRunner\ScriptRunner; //path_to_script, processes count (if omitted then system CPU cores count will be used) $sr = new ScriptRunner('cw.php', 4); $sr->run();
处理图像(日志文件、数据文件等)
cw.php
use PhpStrict\CooperativeWorker\CooperativeWorker; $cw = new CooperativeWorker( //returns array of images (with path to it) from dir function() { $images = glob('/path_to_images/*.jpg'); array_walk( $images, function(&$val, $key, $path) { $val = $path . '/' . $val; }, '/path_to_images' ); return $images; }, function(string $image) { echo 'Processing image: ' . $image . PHP_EOL; //do some image operation (resizing, cropping, etc.) } ); $cw->run();
测试
要执行测试套件,您需要 Codeception。
vendor/bin/codecept run