Отправление задач из пулов потоков в распределенной среде

Я просматривал документацию по порождению новых процессов из задачи, выполняемой на рабочем месте. Я наткнулся на это отсюда:

Однако каждая запущенная задача занимает один поток, и поэтому, если вы запускаете много задач, которые запускают другие задачи, можно заблокировать систему, если вы не будете осторожны. Вы можете вызвать функцию secede из задачи, чтобы она удалила себя из выделенного пула потоков в административный поток, который не занимает слот в Dask worker.

Что значит перейти в административный поток? Все слоты имеют одинаковый приоритет или что-то похожее? А административный поток имеет приоритет?

В качестве конкретного примера, вот что я думаю попробовать:

from dask.distributed import get_client, secede

def compute_square(x):
    # Get locally created client
    client = get_client()
    secede()  # or not?
    if x > 5:
        client.submit(lambda x : x**2, x)

где compute_square и lambda Функция потенциально может быть запущена довольно много раз, и будет более сложной в вычислительном отношении функцией, требующей затрат времени в 1 мс при отправке заданий. Должен ли я использовать secede в этом случае?

1 ответ

Решение

Что значит перейти в административный поток?

Работники Dask поддерживают пул потоков фиксированного размера для выполнения задач. Когда вы звоните secede ваши вычисления покидают этот пул потоков и открывают еще один слот для выполнения других задач. Поток вашей задачи все еще существует, но это просто обычный поток. Термин "административный поток" не означает ничего, кроме "потока, не входящего в пул потоков".

Все слоты имеют одинаковый приоритет или что-то похожее?

После запуска задач между ними нет приоритета. Все они работают в обычных потоках Python, для которых нет приоритетов.

А административный поток имеет приоритет?

нет

Должен ли я использовать отдел в этом случае?

Вам следует позвонить secede если

  1. Существует вероятность того, что вы вызовете достаточно задач, которые ожидают выполнения других задач, так что никакие задачи не могут быть завершены, потому что все потоки вашего пула потоков ожидают открытия других слотов.
  2. Вы не намерены делать гораздо больше работы в этой задаче

Вы не должны звонить secede если

  1. Вы намерены выполнять гораздо больше вычислительных задач в задаче после вызова secede, Это все еще будет хорошо, но несколько невежливо, потому что Даск будет чувствовать себя комфортно, запуская некоторые из этих задач без каких-либо ограничений.
Другие вопросы по тегам