SkylerПотоки нормально работают с ожиданием, поэтому и быстро.
Хм, но ведь кол-во потоков под 100 дает реально быструю производительность, задания выполняются быстро, исключая последние несколько. А в 3 потока вообще о производительности говорить нельзя.
SkylerПоясню.
Вот про это можно поподробней? Т.е. как бы перегружая канал выполнением большого кол-ва задач за короткое время, канал начинает “тупить”? А если применять задержки, не загружая его сильно?
Допустим, через канал может пройти тысяча запросов за одну секунду, а процессор пытается вогнать туда две тысячи. Исходящие запросы просто уходят в буфер сетевухи (драйверов, сетевого ядра ОС… не важно) и там ждут своей очереди. Поэтому первая тысяча запросов нормально, а вторая не очень.
При этом следует отметить, что канал, на самом деле, обычно не совсем полнодуплексный. Т.е. отправляющаяся пачка запросов, мешает принимающейся пачке ответов… Но это уже совсем дебри.
SkylerСрочно читаем документацию: ожидание в сто секунд, это, конечно, интересно, но явно не то, чего вы ожидаете.
time.sleep(100)
ИМХО, у вас изначально немного неправильный подход. Сначала отдельно создайте объект-пулл нитей и давайте ему задания.
Кстати, пулл можно красиво организовать с помощью Queue.Queue.