Я пишу майнер данных на 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()
Так почему мои потоки анализируют одни и те же результаты много раз, когда все они должны иметь уникальные списки?Почему они возвращают разные результаты, даже на одном и том же идентификаторе?Если вы хотите увидеть больше кода, просто спросите, и я с радостью предоставлю.Спасибо за любую информацию, которую вы можете предоставить!