CoroutineRunner
協(xié)程執(zhí)行器 CoroutineRunner類似于Csp組件,但更加靈活,可以投遞協(xié)程任務(wù)并限制最大同時執(zhí)行數(shù)、最長執(zhí)行時間、成功或失敗回調(diào)
簡單示例
use co;
use EasySwoole\Component\CoroutineRunner\Runner;
use EasySwoole\Component\CoroutineRunner\Task;
$runner = new Runner(10);
$runner->setOnException(function(\Throwable $e, $task){
echo $e->getMessage();
echo PHP_EOL;
});
$max = 30;
$allTask = [];
while($max>0){
$task = new Task(function() use ($max) {
echo $max .PHP_EOL;
co::sleep(1);
// 將設(shè)這是一個curl爬取任務(wù) return 爬取結(jié)果 可以在外部獲取
return 'ok';
});
$runner->addTask($task);
$allTask[] = $task;
$max--;
}
$runner->start(1);// 最長執(zhí)行1秒 總共投遞了30個 最大并發(fā)10個 需要3秒執(zhí)行完,所以會有一部分將被丟棄 看下方參數(shù)說明列表
foreach($allTask as $key => $task){
var_dump($task->getResult());
}
參數(shù)說明
Runner構(gòu)造函數(shù)
可接收兩個參數(shù) __construct($concurrency = 64,$taskChannelSize = 1024)
- concurrency 最大同時執(zhí)行的協(xié)程數(shù)量
- taskChannelSize 可投遞的task隊列長度
Runner->setOnException
設(shè)置異常回調(diào) 有兩個參數(shù) (\Throwable $e, Task $task)
Runner->start
開啟已經(jīng)投遞的task協(xié)程的執(zhí)行,有一個參數(shù)
- float $waitTime = 30 最長執(zhí)行時間,如果超過這個時間,剩余的task協(xié)程將被丟棄,不再執(zhí)行。
Task構(gòu)造函數(shù)
需要一個callable參數(shù),用于調(diào)用執(zhí)行,可以在閉包內(nèi)return數(shù)據(jù)
,外部使用 $task->getResult()
獲取
- return 不等于 false的數(shù)據(jù)將會觸發(fā)onSuccess
- return false 將會觸發(fā) onFail
Task->setOnSuccess
需要一個callable參數(shù)
【非必選】 task執(zhí)行完成回調(diào)
Task->setOnFail
需要一個callable參數(shù)
【非必選】 task執(zhí)行失敗回調(diào)
Task->getResult
獲取call函數(shù)執(zhí)行后return的數(shù)據(jù)