Python學習---Python的非同步IO[all]

來源:互聯網
上載者:User

標籤:toolbar   ima   ons   執行   就是   1.0   process   效率   twisted   

1.1.1. 前期環境準備和基礎知識

安裝:

pip3 install aiohttp

pip3 install grequests

pip3 install wheel

pip3 install scrapy

注意:

    windows上scrapy依賴 https://sourceforge.net/projects/pywin32/files/

安裝Twisted

a. http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted,

b. 下載:Twisted-17.1.0-cp35-cp35m-win_amd64.whl

c. 進入檔案所在目錄

d. pip3 install Twisted-17.1.0-cp35-cp35m-win_amd64.whl

 
實現IO操作的方式
 

為什麼需要非同步請求呢?

     如果是正常的請求,一個請求結束後才能開啟下一個請求[串列請求],如果期間有一個請求一次,則後面的請求都會終止。

     如果是類似多線程的非同步請求,則由多個線程同時開啟多個請求,一個請求的異常不會影響其他

實現IO操作有3種方式:

同步  【串列操作】
多進程【更消耗資源,有作業系統調用】 --> 更適合計算密集型操作因為需要並行作業,消耗CPU
       線程是電腦工作的最小單元
多線程【有CPU進行調用,節省資源】    --> 更適合多IO操作,因為發送請求後不消耗CPU資源
       進程中至少有一個線程,預設都有一個主線程且共用進程的內部資源
多協程 --> 一個進程內一個線程完成多個任務【可以同時接收多個請求,然後在一個一個的處理請求】
       如果遇到阻塞則執行下一個請求,如果阻塞的請求收到回複後執行剛才阻塞的那個請求【回調實現】,效率比多線程還高.

註:線程裡面有GIL【global Interpreter lock】,Python裡面有個GIL鎖[該鎖保障同時間1個進程內只允許1個線程操作],不允許CPU操作多個線程,不允許CPU調用資源[也就是限制了CPU,即限制了多線程]。但是線程可以進行IO操作,多個線程可以同時進行多個IO操作[URL 請求等,因為CPU的只需要發送一下即可,發送後不消耗cpu資源],

利用多線程實現IO的非同步作業:

import requestsfrom concurrent.futures.thread import ThreadPoolExecutorpool = ThreadPoolExecutor(5) # 建立線程池,也可以理解為多線程了這裡url_list = [    ‘https://www.baidu.com/‘,    ‘https://www.taobao.com/‘,    ‘https://www.google.com/search‘,    ‘https://hao.360.cn/‘,]def async_url(url):    try:        response = requests.get(url)        print(‘正常請求:‘, ‘【‘, url, ‘】‘, response.content)    except Exception as e:        print(‘異常請求:‘, e)for url in url_list:    print(‘請求開始:‘, url)    pool.submit(async_url, url)pool.shutdown()   # 關閉線程

後台顯示結果:

利用多進程實現IO的非同步作業:

[其他同上]from concurrent.futures.process import ProcessPoolExecutorimport requestspool = ProcessPoolExecutor(5) # 建立進程池,也可以理解為多線程了這裡pool.submit(async_url, url)   # async_url是個方法,url是傳遞過去參數pool.shutdown()   # 關閉進程
非同步IO_1---asyncio模組(no-http)

Python學習---IO的非同步[asyncio模組(no-http)]

非同步IO_2---gevent+Grequests

Python學習---IO的非同步[gevent+Grequests模組]

非同步IO_3---twisted模組

Python學習---IO的非同步[twisted模組]

非同步IO_4---tornado模組

Python學習---IO的非同步[tornado模組]

自訂非同步IOPython學習---IO的非同步[自訂非同步IO]

Python學習---Python的非同步IO[all]

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.