Порядок обработки модуля потоков Python - PullRequest
2 голосов
/ 02 апреля 2012

Я пишу веб-сканер, который обрабатывает несколько URL-адресов одновременно и работает следующим образом:

  1. Он получает URL-адрес из списка URL-адресов, включенного в seed_list.txt,

  2. Он сканирует его и записывает данные в data.txt;

так же, как работает большинство веб-сканеров.

Когда я делаю это однопоточным, я могу получить данные в data.txt в том же порядке, что и URL-адреса в seed_list.txt, но когда они многопоточные, я не могу контролировать их,так как каждый поток записывает данные в data.txt после завершения.

Есть ли способ сделать мой веб-сканер многопоточным, но сохранить исходный порядок?

Большое спасибо!


@ Ланс, Игнасио и Максим,

спасибо всем за помощь - ваши ответы определенно указывают мне верное направление.

Ответы [ 3 ]

2 голосов
/ 02 апреля 2012

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

1 голос
/ 02 апреля 2012

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

Этот поток "вывода" может сортировать / фильтровать ваши результаты.

1 голос
/ 02 апреля 2012

Вы можете создать класс, у которого есть порядковый номер строки из seed_list.txt, URL-адрес и где находятся данные из Интернета.Объект этого типа может быть создан с номером строки и URL, затем он передается в рабочий поток, который помещает данные в объект, а затем объект передается в поток записи, который упорядочивает объекты по строкенумерация и вывод данных по мере необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...