使用python中的线程加速列表操作

时间:2016-10-01 13:13:32

标签: python multithreading list python-3.x set

我有一个巨大的代理列表(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(代理)的操作所以重复删除,实在是很慢。有没有办法使用线程来加速这个?

1 个答案:

答案 0 :(得分:3)

不,线程不会加快速度,原因有三:

  1. Python GIL阻止Python代码并行执行;执行Python代码的线程只能同时运行。对于相同数量的CPU工作,需要相同的时间或更长时间。

  2. 为了能够从多个线程添加到相同的数据结构,您必须添加锁定,从而进一步减慢线程。

  3. 您的代码很慢,因为它浪费了周期,因为您每次迭代都会重新创建set对象,然后再次丢弃它。随着proxies继续增长,这种情况一直在增长,所以最后你创建了每个proxies大小的集合,从长度1一直到长度70k,接近500万步到扔掉70k套。

  4. 您应该生成一次集。你可以在集合理解中这样做:

    with open('proxy.txt') as f:
        proxies = {tuple(line.strip().split(':')) for line in f}