如题:
现在有一个命令行运行的程序,要循环执行请求接口,接口有分页。有的接口很快就结束了,有的还有好几十页。他们都在一个command中进行。
如果想要把这些分页多的,再多开协程并发请求分页。但是又不能超过最大的进程池限制,应该如何处理?
接口A、B、C 使用 Parallel 创建三个协程并行执行。
C接口由于请求页数太多,后续想要实现为并行请求分页。 比如开10个协程,1-10页同时请求。
如果假设A、B、C三个接口并行已经达到进程池上限,那么C是不能直接开启协程的。 需要等到 A、B执行完成后,再开启协程分页。
应该如何解决
-- 解决方案:
<?php
use Hyperf\Coroutine\Concurrent;
$concurrent = new Concurrent(10);
for ($i = 0; $i < 30; ++$i) {
$concurrent->create(function () {
$this->pagnation();
});
}
function pagnation() {
$concurrent = new Concurrent(10);
$page = 100;
for ($i = 0; $i < $page; ++$i) {
sendReqest($url);
...
}
}
是否可以采用上面这种方案:
使用 Concurrent 协程运行控制 hyperf.wiki/3.0/#/zh-cn…
设置最大的协程数量,分页全部设置为协程程序。 如果有的接口很快请求结束,会释放协程。那么其他的分页较多的程序,会自动占用空余的协程,然后达到最大的利用率。