Остаток очереди (: queue_count) не равен 0 после завершения всех задач - PullRequest
0 голосов
/ 30 октября 2019

Я использую пулы HTTPoison (1.6.1) и Hackney (1.15.2):

:hackney_pool.child_spec(:start, [checkout_timeout: ..., max_connections: 100]),
:hackney_pool.child_spec(:trigger, [checkout_timeout: ..., max_connections: 100]),
:hackney_pool.child_spec(:result, [checkout_timeout: ..., max_connections: 100])

...

HTTPoison.get('...', [...], [
proxy: ...,
proxy_auth: ...,
timeout: ...,
recv_timeout: ...,
hackney: [pool: :start]
])

, которые выполняются в задачах:

...
tasks = Enum.map(searches, fn(search) ->
  Task.Supervisor.async_nolink(MyApp.TaskSupervisor, fn ->
    get_search(pid, search)
  end)
end)

tasks_with_results = Task.yield_many(tasks, 300_000)

Enum.map(tasks_with_results, fn {task, res} ->
  res || Task.shutdown(task, :brutal_kill)
end)
...

Дело в том,что я отслеживаю свои proxy_stats в режиме реального времени с помощью функции get_stats / 1 на :hackney_pool (возвращает proplist ). Итак, проблема в том, что после завершения всех поисков (когда «queue_count»> ~ 900) мы получаем остаток в «queue_count», когда он должен быть 0. Например:

%{
  "start" => [0, 12],
  "result" => [0, 54],
  "trigger" => [0, 19]
}

где [0, 54] => [:in_use_count, :queue_count]

Извините за плохой английский

Спасибо

...