Потоки Python stack_size и segfaults - PullRequest
       17

Потоки Python stack_size и segfaults

2 голосов
/ 27 декабря 2008

Скрипт веб-сканера, который порождает не более 500 потоков, и каждый поток в основном запрашивает определенные данные, передаваемые с удаленного сервера, ответ каждого сервера по содержанию и размеру отличается от других.

я устанавливаю stack_size как 756K для потоков

threading.stack_size(756*1024)

, что позволяет мне иметь достаточное количество необходимых потоков и выполнять большинство заданий и запросов. Но так как ответы некоторых серверов больше, чем у других, и когда поток получает такой ответ, сценарий умирает с SIGSEGV.

stack_sizes больше чем 756K делает невозможным одновременное получение необходимого количества потоков.

какие-либо предложения о том, как я могу продолжить с заданным stack_size без сбоев? и как я могу получить текущий используемый stack_size любого данного потока?

1 Ответ

10 голосов
/ 27 декабря 2008

Почему на земле вы создаете 500 нитей? Это кажется ужасной идеей!

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

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

Я рекомендую использовать Twisted - это управляемый событиями сетевой движок. Он очень гибкий, безопасный, масштабируемый и очень стабильный (без ошибок).

Вы также можете взглянуть на Scrapy - Это среда для сканирования и сканирования веб-страниц, написанная на Python / Twisted. Он все еще находится в стадии разработки, но, может быть, вы можете взять некоторые идеи.

...