, , Poolboy , N (N - URL-), -. , , , , url . , , .
Poolboy :poolboy.checkout/2, , . , :full, pid.
:
def crawl_parallel(urls) do
urls
|> Enum.map(&crawl_task/1)
|> Enum.map(&Task.await/1)
end
defp crawl_task(url) do
case :poolboy.checkout Crawler, false do
:full ->
:timer.sleep 100
crawl_task url
worker_pid ->
Task.async fn ->
Crawler.Worker.crawl worker_pid, url
:poolboy.checkin Crawler, worker_pid
end
end
end