python多線程和多進程如何選擇?

最近使用使用Python做IP地理庫查詢,想着提高效率,按照IO密集型採用多線程,CPU密集型使用多進程,初步以爲查詢應該是IO密集型任務,所以初步我是採用的多線程,但是跑了一天後(跑千萬量級)發現速度好慢啊,於是我就做了簡單的測試,我是用的機器是8核32線程的配置,測試代碼與運行時間如下:

  • 採用4線程去執行,花費162秒
from multiprocessing.dummy import Pool as ThreadPool
import time
def main ():
    start = time.time()
    pool = ThreadPool(4)
    #文件讀取
    pool.map(do_query, file_name)
    pool.close()
    pool.join()
    end = time.time()
    print "time:", end-start

 

  • 採用單線程,卻只用了118秒

 

pool = ThreadPool(1)

所以接下來採用多進程的測試,果然採用4進程,只用了30s.

from multiprocessing import Pool as ProcessPool
import time
def main ():
    start = time.time()
    pool = ProcessPool(4)
    #文件讀取
    pool.map(do_query, file_name)
    pool.close()
    pool.join()
    end = time.time()
    print "time:", end-start

後來果斷將腳本改爲多進程運行,這是在使用Python的時候犯得一個錯誤,總覺得查詢是IO密集型任務,但如果使用別人封裝的接口,進行大批量任務之前最好是測試一下,到底是佔IO還是CPU。正確的選擇線程還進程執行,才能真正的提高效率。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章