У меня есть сценарий питона, который хорошо работает в течение нескольких цифр:использовать множество процессов для фильтрации миллиона записей
def ncpr (searchnm):
import urllib2
from bs4 import BeautifulSoup
mynumber = searchnm
url = "http://www.domain.com/saveSearchSub.misc?phoneno=" + mynumber
soup = BeautifulSoup(urllib2.urlopen(url))
header = soup.find('td', class_='GridHeader')
result = []
for row in header.parent.find_next_siblings('tr'):
cells = row.find_all('td')
try:
result.append(cells[2].get_text(strip=True))
except IndexError:
continue
if result:
pass
else:
return str(i)
with open("Output.txt3", "w") as text_file:
for i in range(9819838100,9819838200):
myl=str(ncpr(str(i)))
if myl != 'None':
text_file.write((myl)+'\n')
Он проверяет диапазон 100 номеров и возвращать целое число, которое не присутствует в базе данных. Для обработки 100 записей требуется несколько секунд. Мне нужно обработать миллион чисел, начиная с разных диапазонов. .
9819800000 9819900000
9819200000 9819300000
9829100000 9829200000
9819100000 9819200000
7819800000 7819900000
8819800000 8819900000
9119100000 9119200000
9119500000 9119600000
9119700000 9119800000
9113100000 9113200000
Этот словарь будет генерироваться из списка поставки:
mylist=[98198, 98192, 98291, 98191, 78198, 88198, 91191, 91195, 91197, 91131]
mydict={}
for mynumber in mylist:
start_range= int(str(mynumber) + '00000')
end_range=int(str(mynumber+1) +'00000')
mydict[start_range] = end_range
Мне нужно использовать потоки таким образом, что я могу проверить 1 миллиона записей как можно быстрее.
Вам нужно будет переместить импорт за пределы 'def ncpr()', иначе они будут называться 1 миллион раз. Как правило, хорошая идея минимизировать код в цикле. – nathancahill
только один вопрос. если ваша работа может быть разделена на подзадачи, они независимы? – qqibrow
Да. Как вы можете видеть, ряды номеров не перекрывают друг друга. Выходной файл (Output.txt3) также может быть раздельным, если требуется. Но один файл легче загружать. – shantanuo