gpt4 book ai didi

python - 每个主机与 twisted.web.client.Agent 的最大连接数

转载 作者:太空狗 更新时间:2023-10-30 01:09:30 24 4
gpt4 key购买 nike

我有以下代码,它使用 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, ...)

第一个请求完成后,第二个请求才会运行。

关于python - 每个主机与 twisted.web.client.Agent 的最大连接数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12854855/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com