gpt4 book ai didi

python - Gevent Pool 似乎并没有提高性能

转载 作者:太空宇宙 更新时间:2023-11-03 14:33:46 25 4
gpt4 key购买 nike

我有一个包含 900 万个 http 链接的列表,它们存储在 lt

对于最低限度的可重复性example :

这是我最初写的

cat = []
i=0
for l in lt:
print(i)
if re.search('.+videoStory.+', l):
print('video')
cat.append('video')
else:
response=requests.get(l,headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36', })
if response.status_code == 200:
bs = BeautifulSoup(response.content.decode('ascii', 'ignore'),'lxml')
cat.append(bs.findAll('div', {'class':'ArticleHeader_channel_4KD-f'})[0].text)
elif response.status_code == 404:
print('404')
cat.append('404')
elif response.status_code == 500:
print('500')
cat.append('500')
else:
print(response.status_code)
break
i+=1

bs.findAll('div', {'class':'ArticleHeader_channel_4KD-f'})[0].text 提取页面的类别。

此代码在 1 秒内成功完成 3 个链接,这意味着需要 34.7 天才能获得 900 万个链接(通过仅获取 5000 个链接进行测试,花费了 27 分钟左右)

p = pool.Pool(1000)
yo= []
jobs=[]

def get_link(ul):
if re.search('.+videoStory.+', ul):
yo.append('video')
else:
r = requests.get(ul, headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36', })
if r.status_code == 200:
bs = BeautifulSoup(r.content.decode('ascii', 'ignore'),'lxml')
crap = bs.findAll('div', {'class':'ArticleHeader_channel_4KD-f'})[0].text
yo.append(crap)
elif r.status_code == 404:
# print('404')
yo.append('404')
elif r.status_code == 500:
# print('500')
yo.append('500')

startTime= datetime.now()
for yum in lt:
jobs.append(p.apply_async(get_link, args =(yum,)))

gevent.joinall(jobs)
timeElapsed=datetime.now()-startTime
print('Time elpased (hh:mm:ss.ms) {}'.format(timeElapsed))

此代码在 1 秒内成功完成 5 个链接,这意味着需要 20.8 天才能获得 900 万个链接(通过仅获取 5000 个链接进行测试,花费了 16 分钟左右)

这花了太长时间。

应该尝试将并发设置为10000,会有帮助吗?(也许路透社不会允许这么多并发)

我应该尝试并行处理吗?

最佳答案

根据这些信息,您应该能够运行代码的多个实例,这些实例从列表中的不同位置开始。

假设您运行该代码的 5 个实例,每个实例都有责任浏览 5,000 个链接。因此,在一次运行中,您覆盖了 25,000 个链接。这对您来说大约是 30 分钟。

假设,实例 #1 运行链接 1-5000,当其列表耗尽时,它应该从第 25,001 个链接开始。因此,对于每个实例,您都必须迭代它才能从第 where_it_left + 25000 链接运行。

让我们看看这里的数学。简单的例子:5,000,000 个链接/25,000 = 200 次运行。
200 * 0.5 小时 = 100 小时(约 4-5 天)

如果您可以同时运行 5 个以上的代码实例,您甚至可以进一步减少此次数。

另一个更好的方法是使用一些网络抓取软件,例如HTTrack。但是,您可能需要在其中进行大量配置才能获得您需要的结果。

关于python - Gevent Pool 似乎并没有提高性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47103401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com