一個進程里只有一個線程,我們稱之為單線程爬蟲。單線程爬蟲每次只訪問一個頁面,不能充分利用電腦的網路帶寬。一個頁面最多也就幾百KB,所以爬蟲在爬取一個頁面的時候,多出來的網速就浪費掉了。 而如果我們可以讓爬蟲同時訪問10個頁面,就相當於我們的爬取速度提高了10倍。這個時候就需要使用多線程技術了。 這裡 ...
一個進程里只有一個線程,我們稱之為單線程爬蟲。單線程爬蟲每次只訪問一個頁面,不能充分利用電腦的網路帶寬。一個頁面最多也就幾百KB,所以爬蟲在爬取一個頁面的時候,多出來的網速就浪費掉了。
而如果我們可以讓爬蟲同時訪問10個頁面,就相當於我們的爬取速度提高了10倍。這個時候就需要使用多線程技術了。
這裡有一點要強調一下,Python這門語言在設計上的時候,有一個GIL鎖。這個東西讓Python的多線程都是偽多線程。本質上還是只有一個線程,但是這個線程每個事情只做幾毫秒,做完幾秒救保存線程,換做其他事情幾毫秒,換一輪下來繼續回到第一件事上,恢複線程再做幾秒,繼續換……
在《X戰警-天啟》中,萬磁王他兒子從教授的學院裡面救出了非常多的人。由於他速度非常的快,所以雖然它是一個人一個人救的,但是對其他人來說,就感覺像是全部同時移動到了學校外面去了一樣。
這樣微觀上的單線程,在巨集觀上看起來就像是同時在做幾件事。這種機制在IO密集型的操作上面影響也不大,但是在CPU計算密集型的操作上面,由於CPU本來十分繁忙,這就會對性能產生非常大的影響。所以涉及到計算密集型的程式,就需要使用多進程,Python的多進程不受GIL鎖的影響。
爬蟲屬於IO密集型的程式,所以使用多線程不會不會對性能造成太大的影響。
轉載:極客學院某位老師的話(修改了一點點)。