5 Star 24 Fork 12

my_teste/PHP Generator Yield Demo

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
simpleYieldScheduler.php 1.63 KB
一键复制 编辑 原始数据 按行查看 历史
Paul Xu 提交于 2020-05-19 23:15 +08:00 . 最简单的demo附上
<?php
/**
* Class YieldScheduler
*/
Class YieldScheduler
{
/**
* @var array $gens
*/
public $gens = array();
/**
* 新增任务到 调度器
*
* @param Generator $gen
* @param null $key
*
* @return $this
*/
public function add($gen, $key = null)
{
if (null === $key) {
$this->gens[] = $gen;
} else {
$this->gens[$key] = $gen;
}
return $this;
}
/**
* 开始
*/
public function start()
{
$keepRun = true;
/**
* @var Generator $gen
*/
$gen = null;
do {
// 循环调度任务
foreach ($this->gens as $id => $gen) {
$re = $gen->current();
echo 'generator id: ' . $id . ' run, get current re : ' . $re . PHP_EOL;
$gen->next();
}
// 检查任务是否已完成
foreach ($this->gens as $id => $gen) {
$check = $gen->valid();
if (!$check) {
// 已执行完毕的任务就可以踢出任务调度队列了
unset($this->gens[$id]);
}
}
// 调度器是否完成所有任务
if (0 >= count($this->gens)) {
$keepRun = false;
}
} while ($keepRun);
}
}
function yieldFunc($max = 10)
{
for($i = 0; $i < $max; $i ++) {
(yield $i);
}
return $i;
}
$gen1 = yieldFunc(3);
$gen2 = yieldFunc(5);
$scheduler = new YieldScheduler();
$scheduler->add($gen1)->add($gen2);
$scheduler->start();
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
PHP
1
https://gitee.com/xupaul/PHP-generator-yield-Demo.git
git@gitee.com:xupaul/PHP-generator-yield-Demo.git
xupaul
PHP-generator-yield-Demo
PHP Generator Yield Demo
master

搜索帮助