使用响应填充列表并同时处理它们

时间:2015-10-18 13:33:57

标签: python multithreading parallel-processing request threadpool

我正在尝试从网页下载一些产品。这个网页(根据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...

有一些简单的方法吗?

0 个答案:

没有答案