Почему мои потоки Data Miner собирают одни идентификаторы много раз, а другие нет вообще? - PullRequest
1 голос
/ 23 октября 2011

Я пишу майнер данных на python с urllib2 и BeautifulSoup для анализа некоторых веб-сайтов, и, пытаясь разделить его процессы на несколько потоков, я получаю следующий вывод:

Успешно очищеноID 301

Успешно очищенный ID 301

Пустой результат с идентификатором 301

«Успешно» означает, что я получил необходимые данные.«Пусто» означает, что на странице нет того, что мне нужно.«ID» - это целое число, прикрепленное к URL, например site.com/blog/post/.

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

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

def constructURLs(settings,idList):
    assert type(settings) is dict
    url = settings['url']
    return [url.replace('<id>',str(ID)) for ID in idList]        

def miner(urls,results):
    for url in urls:
        data = spider.parse(url)
        appendData(data,results)

def mine(settings,results):
    (...)
    urls = constructURLs(settings,idList)
    threads = 3 # number of threads
    urlList = [urls[i::threads] for i in xrange(threads)]
    for urls in urlList:
        t = threading.Thread(target=miner,args=(urls,results))
        t.start()

Так почему мои потоки анализируют одни и те же результаты много раз, когда все они должны иметь уникальные списки?Почему они возвращают разные результаты, даже на одном и том же идентификаторе?Если вы хотите увидеть больше кода, просто спросите, и я с радостью предоставлю.Спасибо за любую информацию, которую вы можете предоставить!

...