[英]Concurrent http requests using a blocking http library with Python in a single thread
因此,我有一個要嘗試以特定方式解決的問題,但是我不確定要實現多少困難。
我想使用Python 3.4的asyncio / coroutines功能,使用阻塞的http庫(例如請求)或執行HTTP請求(例如aws的boto)的任何Python api觸發許多並發的HTTP請求。
我知道在線程/進程中運行任務的run_in_executor()方法,但是我想避免這種情況。
我想在單線程中使用Linux / Unix內核中的那些選擇功能來實現。
實際上,我正在關注David Beazley對此的介紹,並且正在嘗試使用以下代碼: https : //github.com/dabeaz/concurrencylive/blob/master/aserver.py
但沒有Future / Pool內容,請使用我的Blocking-api調用代替計算斐波那契數。
簡而言之,http請求似乎仍在按順序運行。
有什么想法可能嗎? 如何?
謝謝
不可能。 由於套接字處於阻塞模式,因此requests
庫對基礎套接字的所有調用都處於阻塞狀態(即socket.read
)。 您可以將套接字置於非阻塞模式,但隨后socket.read
將失敗。 基本上,您需要一個事件循環來告訴您何時可以進行socket.read
,但是編寫阻塞庫並不是一個人在意的。 這就是asyncio
存在的全部原因。 提供不同庫可以共享並利用非阻塞文件描述符(例如套接字)的默認事件循環。
使用aiohttp
,它和requests
一樣簡單 ,在此過程中,您將了解有關asyncio
更多信息。 asyncio
和新的Python 3.5 async/await
語法是網絡IO的未來; 屈服(雙關語意)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.