У меня много задач, которые я хотел бы выполнять по несколько за раз. Нормальным решением для этого является пул потоков. Однако для моих задач нужны ресурсы, которые есть только у определенных потоков. Поэтому я не могу просто передать задачу любому старому потоку; поток должен иметь ресурс, необходимый задаче.
Кажется, что для этого должен быть шаблон параллелизма, но я не могу его найти. Я реализую это в Python 2 с многопроцессорной обработкой, поэтому ответы в этих терминах были бы замечательными, но универсальное решение подойдет. В моем случае «потоки» на самом деле являются отдельными процессами ОС, а ресурсы — сетевыми подключениями (и нет, это не сервер, поэтому (e) опрос/выбор не поможет). Как правило, поток/процесс может содержать несколько ресурсов.
Вот наивное решение: поместить задачи в рабочую очередь и освободить для нее мой пул потоков. Пусть каждый поток проверяет: «Могу ли я выполнить эту задачу?» Если да, сделайте это; если нет, верните его в очередь. Однако, если каждая задача может быть выполнена только одним из N потоков, то я делаю около 2N дорогих, бесполезных обращений к общей очереди только для того, чтобы получить одну единицу работы.
Вот моя текущая мысль: иметь общую рабочую очередь для каждого ресурса. Выдача задач в соответствующую очередь. Каждый поток проверяет очереди, которые он может обработать.
Идеи?