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

來源:互聯網
上載者:User

標籤:art   port   大發   com   socket   imp   cep   margin   one   

安裝gevent模組

pip3 install gevent

Gevent執行個體

import geventimport requestsfrom gevent import monkey# socket發送請求以後就會進入等待狀態,gevent更改了這個機制# socket.setblocking(False)  -->發送請求後就不會等待伺服器響應monkey.patch_all()  # 找到內建的socket並更改為gevent自己的東西def fetch_async(method, url, req_kwargs):    print(method, url, req_kwargs)    response = requests.request(method=method, url=url, **req_kwargs)    print(response.url, response.content)# ##### 發送請求 #####gevent.joinall([    # 這裡spawn是3個任務[實際是3個協程],每個任務都會執行fetch_async函數    gevent.spawn(fetch_async, method=‘get‘, url=‘https://www.python.org/‘, req_kwargs={}),    gevent.spawn(fetch_async, method=‘get‘, url=‘https://www.yahoo.com/‘, req_kwargs={}),    gevent.spawn(fetch_async, method=‘get‘, url=‘https://github.com/‘, req_kwargs={}),])

Gevent也是支援協程池

##### 發送請求(協程池控制最大協程數量) ###### 也可以理解為先最大發送2個請求,2個請求結束後發送第三個請求from gevent.pool import Poolpool = Pool(2)  # 最多執行2個協程式,None表示不設定限制gevent.joinall([    pool.spawn(fetch_async, method=‘get‘, url=‘https://www.python.org/‘, req_kwargs={}),    pool.spawn(fetch_async, method=‘get‘, url=‘https://www.yahoo.com/‘, req_kwargs={}),    pool.spawn(fetch_async, method=‘get‘, url=‘https://www.github.com/‘, req_kwargs={}),])
Grequests

安裝grequests

pip3 install grequests

grequests實際上就是封裝了gevent裡面的方法,然後配合requests實現非同步IO

grequests = gevent + request

grequests.map() 內部實現

Grequest執行個體

import grequests  # 實際上就是requests + geventrequest_list = [    # 發送get請求    grequests.get(‘https://www.baidu.com/‘, timeout=10.001),    grequests.get(‘https://www.taobao.com/‘),    grequests.get(‘https://hao.360.cn/‘)]# ##### 執行並擷取響應列表 #####response_list = grequests.map(request_list)  # 實際上內部迴圈執行gevent內部的joinall()方法print(response_list)# ##### 執行並擷取響應列表(處理異常) ###### def exception_handler(request, exception):# print(request,exception)#     print("Request failed")# response_list = grequests.map(request_list, exception_handler=exception_handler)# print(response_list)

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.