Привет, ребята! Я написал небольшие функции искателя веб-страниц. Но я новичок в многопоточности, я не мог его оптимизировать. Мой код:Оптимизация скрипта python при многопоточности
alreadySeenURLs = dict() #the dictionary of already seen crawlers
candidates = set() #the set of URL candidates to crawl
def initializeCandidates(url):
#gets page with urllib2
page = getPage(url)
#parses page with BeautifulSoup
parsedPage = getParsedPage(page)
#function which return all links from parsed page as set
initialURLsFromRoot = getLinksFromParsedPage(parsedPage)
return initialURLsFromRoot
def updateCandidates(oldCandidates, newCandidates):
return oldCandidates.union(newCandidates)
candidates = initializeCandidates(rootURL)
for url in candidates:
print len(candidates)
#fingerprint of URL
fp = hashlib.sha1(url).hexdigest()
#checking whether url is in alreadySeenURLs
if fp in alreadySeenURLs:
continue
alreadySeenURLs[fp] = url
#do some processing
print url
page = getPage(url)
parsedPage = getParsedPage(page, fix=True)
newCandidates = getLinksFromParsedPage(parsedPage)
candidates = updateCandidates(candidates, newCandidates)
Как видите, здесь требуется определенный URL-адрес от кандидатов в определенное время. Я хотел сделать этот сценарий многопоточным, таким образом, чтобы он мог взять не менее N URL-адресов от кандидатов и выполнять эту работу. Может ли кто-нибудь вести меня? Дайте ссылки или предложения?
Существует множество учебных руководств по потоковому использованию в Интернете, а также Google «учебник по потокам python». Учебное пособие по программированию нитей с помощью Python (https://users.info.unicaen.fr/~fmaurel/documents/envrac/python/PyThreads.pdf) - это очень хороший учебник для абсолютных новичков. – taskinoor