[英]Maximum number of connections per host with twisted.web.client.Agent
我有以下代碼,該代碼使用TwistedMatrix Python框架創建HTTPConnectionPool,以及用於HTTP請求的代理:
self.pool = HTTPConnectionPool(reactor, persistent=True)
self.pool.retryAutomatically = False
self.pool.maxPersistentPerHost = 1
self.agent = Agent(reactor, pool=self.pool)
然后我創建請求以連接到本地服務器:
d = self.agent.request(
"GET",
url,
Headers({"Host": ["localhost:8333"]}),
None)
問題是:發出多個同時請求時,本地服務器有時會出現不正確的行為,因此我想將同時請求的數量限制為1。
應將其他請求排隊,直到待處理的請求完成。
我已經嘗試過使用self.pool.maxPersistentPerHost = 1
但是它不起作用。
帶有HTTPConnectionPool的twisted.web.client.Agent是否支持限制每個主機的最大連接數,還是我必須自己實現請求FIFO隊列?
將maxPersistentPerHost
設置為1
的原因沒有幫助,因為maxPersistentPerHost
用於控制每個主機緩存的最大持久連接數。 它不會阻止打開其他連接來服務新請求,只會導致已接收到最大數量的高速緩存的連接后,在收到響應后立即將其關閉。
您可以通過多種方式強制執行序列化。 具有“ FIFO隊列”的一種方法是使用twisted.internet.defer.DeferredLock
。 與Agent
一起使用,如下所示:
lock = DeferredLock()
d1 = lock.run(agent.request, url, ...)
d2 = lock.run(agent.request, url, ...)
第二個請求要等到第一個請求完成后才能運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.