Я определил класс сканера для сканирования каждого веб-сайта как мета-файла. -объект темы:
Код: Выделить всё
Crawler(Thread):
def __init__(self, url, depth, wait):
...
Код: Выделить всё
for i in range(index, math.ceil(len(urls) / 10)):
jobs = []
for url in urls[i * 10:(i + 1) * 10]:
s = Crawler(url)
s.setDaemon(True)
s.start()
jobs.append(s)
for j in jobs:
j.join()
Чтобы оптимизировать работу, лучше начать с 10 потоков обходчика, а затем каждый раз, когда поток обходчика завершается, создайте нового сканера со следующим URL-адресом в списке, пока список не будет готов.
Я думаю, что можно было бы избавиться от метода join() и использовать цикл while для всей длины threading.enumerate, каждый раз добавляя новый поток длина падает ниже 10, но это звучит немного хакерски.
Я изучал очередь Python, но, судя по примерам на https://docs.python.org/3/library/queue.html, я все равно придется полагаться на .join() и, следовательно, ждать выполнения всех потоков в очереди.
Есть ли способ что-то добавить как «прослушиватель событий» потока, чтобы всякий раз, когда поток завершается, я мог обновить список потоков новым потоком?
Подробнее здесь: https://stackoverflow.com/questions/469 ... le-threads