4

Этот вопрос требует совета, а также помощи с некоторым кодом.python 3.4 многопроцессорность

Я изучаю Python с 3.4 Я создал базовый инструмент проверки сети, я импортировал элементы из текстового файла, и для каждого из них я хочу, чтобы python проверял dns (используя pydns), ping ip (используя подпроцесс для вызова собственного пинга ОС).

В настоящее время я проверяю IP-адрес от 5000 до 9000 тыс. И его количество часов, около 4, чтобы вернуть все результаты.

Мне интересно, могу ли я использовать многопроцессорную или поточную передачу, чтобы ускорить это, но все же вернуть результат в список, чтобы строка могла быть записана в файл csv в самом конце скрипта в массовом порядке.

Я новичок в python, поэтому, пожалуйста, скажите мне, если я упустил что-то, что я должен тоже.

Главный код http://pastebin.com/ZS23XrdE

Класс http://pastebin.com/kh65hYhG

+0

Многопроцессорная обработка, вероятно, хорошая ставка, с использованием очереди для соединения, чтобы вернуть данные. Но это может быть не лучше, чем подпроцесс, в зависимости от того, как вы его используете. Вы ждёте завершения каждого? – cdarke

+0

Я обновил главный пост с текущим кодом, который я использую, который занимает много времени. – clonerworks

ответ

0

Поскольку большая часть работы, кажется, на основе IO, вы можете легко полагаться на нитях.

Посмотрите на функцию Executor.map() в cocurrent.futures: https://docs.python.org/3/library/concurrent.futures.html

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

В вашем конкретном случае вы можете обернуть два метода работника (check_dns_ip и os_ping) в одном и передать его функции ThreadPoolExecutor.map.

1

 Смежные вопросы

  • Нет связанных вопросов^_^