Использование GIL в качестве пула потоков

Примечание. У меня недостаточно знаний по этой теме, поэтому я могу делать некоторые наивные предположения.

Предположим, у вас есть функция, выполняющая блокирующий ввод-вывод. Вам нужно запустить эту функцию n раз.

Если бы вы просто создавали n потоков (используя модуль threading) и запускали их одновременно, сработало бы простое использование GIL для управления потоками (на основе ввода-вывода) вместо использования модуля multiprocessing.pool? управлять подпроцессами?


person pdeuchler    schedule 08.06.2012    source источник


Ответы (2)


Плохая практика — использовать детали реализации в качестве основной функции вашего кода. GIL — это деталь реализации CPython, и его нет в других реализациях.

Используйте вещи, которые предназначены для того, чтобы делать то, что вы хотите.

person Gareth Latty    schedule 08.06.2012
comment
Конечно. Это был скорее академический вопрос, чем практический. - person pdeuchler; 08.06.2012
comment
@pdeuchler Во что бы то ни стало, не стесняйтесь не принимать это, если вам нужен теоретический ответ - я уверен, что кто-то еще придет и расскажет о том, насколько жизнеспособн этот подход теоретически, но я оставлю это, так как это действительно практический ответ на вопрос - что на самом деле предлагает SO. - person Gareth Latty; 09.06.2012

Как GIL вообще актуален здесь? Что вы ожидаете получить от этого?

Вы можете создать n потоков, и все они будут выполнять блокирующий ввод-вывод без GIL.

И если вы хотите «управлять» потоками — например, присоединиться ко всем, чтобы знать, когда закончите, — вам все равно нужно сделать это явно; ГИЛ не помогает.

person abarnert    schedule 08.06.2012
comment
Это действительно больше комментарий, чем ответ. - person Gareth Latty; 09.06.2012