我有一个巨大的代理列表(70k),我有这个脚本:
<ul>
<li>
<a id="flodet" href="">Link 1</a>
</li>
<li>
<a id="flodet2" href="">Link 2</a>
</li>
<li>
<a id="flodet3" href="">Link 3</a>
</li>
</ul>
并且set(代理)的操作所以重复删除,实在是很慢。有没有办法使用线程来加速这个?
答案 0 :(得分:3)
不,线程不会加快速度,原因有三:
Python GIL阻止Python代码并行执行;执行Python代码的线程只能同时运行。对于相同数量的CPU工作,需要相同的时间或更长时间。
为了能够从多个线程添加到相同的数据结构,您必须添加锁定,从而进一步减慢线程。
您的代码很慢,因为它浪费了周期,因为您每次迭代都会重新创建set对象,然后再次丢弃它。随着proxies
继续增长,这种情况一直在增长,所以最后你创建了每个proxies
大小的集合,从长度1一直到长度70k,接近500万步到扔掉70k套。
您应该生成一次集。你可以在集合理解中这样做:
with open('proxy.txt') as f:
proxies = {tuple(line.strip().split(':')) for line in f}