Здравствуйте.
Возникла необходимость написать достаточно простой обработчик сайтов(не парсер!).
Одна из самых главных деталей - многопоточность и быстродействие.
Сейчас написан вот такой код:
from queue import Queue
from threading import Thread
import time
from grab import Grab
def submit_form(i, q):
while True:
link = q.get()
g = Grab()
g.go(link)
# Some actions with page
q.task_done()
start_time = time.time()
num_threads = 5
queue = Queue()
for i in range(num_threads):
worker = Thread(target=submit_form, args=(i, queue))
worker.setDaemon(True)
worker.start()
q = [
"link1",
....
"link100"
]
for item in q:
queue.put(item)
queue.join()
print("--- %s seconds ---" % (time.time() - start_time))
В листе q лежит ~100 ссылок, которые нужно обработать параллельно, независимо друг от друга.
Сейчас в 5 потоков данное чудо отрабатывает за ~50 секунд(Достаточно неплохо вроде, да?)
Когда ставлю 30 потоков(Нужно больше, потому что со временем ссылок будет в разы больше) получаю
grab.error.GrabConnectionError: [Errno 7] Failed to connect to линк_на_сайт port 80: Connection refused
С чем это может быть связано и как можно еще улучшить отработку скрипты?
Спасибо за советы :)
UPD:Почитав немного информацию по запросу connection refused python, я сделал вывод, что я не могу создавать больше чем 1 коннекшн в течении одной секунды. Так ли это?