簡體   English   中英

在單個線程中使用阻塞HTTP庫和Python並發http請求

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM