CoroutineRunner

协程执行器 CoroutineRunner类似于Csp组件,但更加灵活,可以投递协程任务并限制最大同时执行数、最长执行时间、成功或失败回调

简单示例

  1. use co;
  2. use EasySwoole\Component\CoroutineRunner\Runner;
  3. use EasySwoole\Component\CoroutineRunner\Task;
  4. $runner = new Runner(10);
  5. $runner->setOnException(function(\Throwable $e, $task){
  6. echo $e->getMessage();
  7. echo PHP_EOL;
  8. });
  9. $max = 30;
  10. $allTask = [];
  11. while($max>0){
  12. $task = new Task(function() use ($max) {
  13. echo $max .PHP_EOL;
  14. co::sleep(1);
  15. // 将设这是一个curl爬取任务 return 爬取结果 可以在外部获取
  16. return 'ok';
  17. });
  18. $runner->addTask($task);
  19. $allTask[] = $task;
  20. $max--;
  21. }
  22. $runner->start(1);// 最长执行1秒 总共投递了30个 最大并发10个 需要3秒执行完,所以会有一部分将被丢弃 看下方参数说明列表
  23. foreach($allTask as $key => $task){
  24. var_dump($task->getResult());
  25. }

参数说明

Runner构造函数

可接收两个参数 __construct($concurrency = 64,$taskChannelSize = 1024)

  • concurrency 最大同时执行的协程数量
  • taskChannelSize 可投递的task队列长度

Runner->setOnException

设置异常回调 有两个参数 (\Throwable $e, Task $task)

Runner->start

开启已经投递的task协程的执行,有一个参数

  • float $waitTime = 30 最长执行时间,如果超过这个时间,剩余的task协程将被丢弃,不再执行。

Task构造函数

需要一个callable参数,用于调用执行,可以在闭包内return数据,外部使用 $task->getResult()获取

  • return 不等于 false的数据将会触发onSuccess
  • return false 将会触发 onFail

Task->setOnSuccess

需要一个callable参数

【非必选】 task执行完成回调

Task->setOnFail

需要一个callable参数

【非必选】 task执行失败回调

Task->getResult

获取call函数执行后return的数据