我正在尝试从网页下载一些产品。这个网页(根据robots.txt)允许我发送2000req /分钟。问题是顺序发送请求然后处理它太耗费时间。
我已经意识到发送请求的方法可以移动到池中,这可以根据时间消耗更好。这可能是因为处理器不需要等待响应而是发送另一个请求。
所以我有一个池,响应被附加到列表RESPONSES中。
简单代码:
from multiprocessing.pool import ThreadPool as Pool
import requests
RESPONSES = []
with open('products.txt') as f:
LINES = f.readlines()[:100]
def post_request(url):
html = requests.get(url).content
RESPONSES.append(html)
def parse_html_return_object(resp):
#some code here
pass
def insert_object_into_database():
pass
pool = Pool(100)
for line in LINES:
pool.apply_async(post_request,args=(line[:-1],))
pool.close()
pool.join()
我想要的是处理那些RESPONSES(HTMLS),以便从RESPONSE列表中弹出响应并在请求期间解析它。
所以它可能是这样的(时间 - >):
post_request(line1)->post_request(line2)->Response_line1->parse_html_return_object(response)->post_request...
有一些简单的方法吗?