2

Привет, ребята! Я написал небольшие функции искателя веб-страниц. Но я новичок в многопоточности, я не мог его оптимизировать. Мой код:Оптимизация скрипта 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-адресов от кандидатов и выполнять эту работу. Может ли кто-нибудь вести меня? Дайте ссылки или предложения?

+2

Существует множество учебных руководств по потоковому использованию в Интернете, а также Google «учебник по потокам python». Учебное пособие по программированию нитей с помощью Python (https://users.info.unicaen.fr/~fmaurel/documents/envrac/python/PyThreads.pdf) - это очень хороший учебник для абсолютных новичков. – taskinoor

ответ

1

Вы можете начать с этих двух звеньев:

  1. Основной ссылочный для нарезания резьбы в Python http://docs.python.org/library/threading.html

  2. обучающую, где они на самом деле реализовать многопоточный URL искателем в питона http://www.ibm.com/developerworks/aix/library/au-threadingpython/

Кроме того, у вас уже есть crawler for python: http://scrapy.org/

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