簡體   English   中英

每個主機與twisted.web.client.Agent的最大連接數

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

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