使用许多进程来过滤一百万条记录

2024-04-24 12:36:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python脚本,可以很好地用于一些数字:

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

我需要以这样的方式使用线程,我可以检查100万条记录尽快。你知道吗


Tags: textinimportforrange数字resultfind
1条回答
网友
1楼 · 发布于 2024-04-24 12:36:06

一个事实与你的请求并行化多少不是一个问题。这意味着处理一百万个数字将产生一百万个请求,在一百万个新的TCP连接上使用一百万个单独的HTTP会话,到www.nccptrai.gov.in。我不认为网站管理员会喜欢这个。你知道吗

相反,您应该找到一种方法来获取某种类型的数据库转储。如果这是不可能的,重新构造代码以重用单个连接来发出多个请求。这里讨论:How to Speed Up Python's urllib2 when doing multiple requests

通过在单个连接上发出所有请求,您可以避免大量开销,并将体验更大的吞吐量,希望最终能够为每个请求发送单个数据包,并为每个响应接收单个数据包。如果您居住在印度境外,远离服务器,那么您也可以从HTTP管道中受益匪浅,在这里您可以发出多个请求而不必等待更早的响应。有一种黑客在这里演示:http://code.activestate.com/recipes/576673-python-http-pipelining/——但是要小心,这可能会再次给站点的运营商带来更多麻烦。你知道吗

相关问题 更多 >