Есть класс пула для рабочего темы, аналогично модулю многопроцессорной обработки Pool class?Пул потоков, похожий на многопроцессорный пул?
Мне нравится, например, простой способ параллелизовать регулировочной
def long_running_func(p):
c_func_no_gil(p)
p = multiprocessing.Pool(4)
xs = p.map(long_running_func, range(100))
однако я хотел бы сделать это без накладных расходов на создание новых процессов.
Я знаю о GIL. Тем не менее, в моей функции usecase, функция будет связанной с IO функцией C, для которой оболочка python освободит GIL до фактического вызова функции.
Должен ли я писать свой собственный пул потоков?
Это потрясающе. У меня возникла проблема с созданием ThreadPools вне основного потока, вы можете использовать их из дочернего потока, когда-то созданного. Я поставил для него проблему: http://bugs.python.org/issue10015 – Olson
Я не понимаю, почему у этого класса нет документации. Такие вспомогательные классы так важны в наши дни. – Wernight
@Wernight: он не является публичным в первую очередь потому, что никто не предложил патч, который предоставляет ему (или что-то подобное) как threading.ThreadPool, включая документацию и тесты. Это действительно хорошая батарея для включения в стандартную библиотеку, но этого не произойдет, если никто ее не напишет. Одно из достоинств этой существующей реализации в многопроцессорной обработке заключается в том, что она должна сделать любой такой патч для потоковой передачи * намного легче написать (http://docs.python.org/devguide/) – ncoghlan