以前說過Python的多線程只能運行在一個單核上,也就是各線程是以併發的方式異步執行的python
這篇文章咱們來聊聊Python多進程的方式編程
多進程依賴於所在機器的處理器個數,在多核機器上進行多進程編程時,各核上運行的進程之間是並行執行的,能夠利用進程池,是每個內核上運行一個進程,當翅中的進程數量大於內核總數時,待運行的進程會等待,直至其餘進程運行完畢讓出內核網絡
多進程就至關於下面這種賣票的行爲多線程
在這裏要注意,當系統內只有一個單核CPU是,多進程並不會發生,此時各進程會依次佔用CPU運行至完成併發
咱們能夠經過Python的語句會的CPU可用的核數,以下圖app
爲了造成比較,咱們仍是使用以前的那個例子,噹噹圖書,搜索關鍵字商品信息的抓取異步
首先寫出多進程主方法async
# coding=utf-8 __Author__ = "susmote" from multi_threading import mining_func import multiprocessing import time def multiple_process_test(): start_time = time.time() page_range_list = [ (1, 10), (11, 20), (21, 32), ] pool = multiprocessing.Pool(processes=3) for page_range in page_range_list: pool.apply_async(mining_func.get_urls_in_pages, (page_range[0], page_range[1])) pool.close() pool.join() end_time = time.time() print("抓取時間:", end_time - start_time) return end_time - start_time
在這裏面,我簡單解釋一下有關多進程的操做函數
pool被定義爲可同時並行3個進程的進程池,而後經過循環,使用apply_async方法使進入進程池的進程以異步的方式並行運行url
下面是主函數
# coding=utf-8 __Author__ = "susmote" from process_func import multiple_process_test if __name__ == "__main__": pt = multiple_process_test() print("pt : ", pt)
把代碼運行起來,獲得以下結果
5.908
再運行一次
3.954
最後一次
4.163
取平均時間
4.341秒
這時咱們再回顧上篇文章多線程的狀況(一樣網絡條件下):
多線程
單線程
能夠看到,差距很是明顯,多進程佔絕大優點
多進程就是這些,你也能夠找一個更大的數據池,去試驗這些方法