使用python sdk我们如何在poolmanager对象中传递重试参数/参数? 假设由于某种原因,如果请求的时间比正常时间更长,那么我们想传递一个重试编号,是否可以利用urllib3支持的重试类? 感谢你的帮助。
2.2.3
抄送@taxpon @frol @mbohlool
@ dnome2您可以通过ApiClient.rest_client.pool_manager
访问PoolManager。 如果要将更改应用到每个客户端,则需要直接创建ApiClient
,并确保在创建新的客户端对象时将其传递。
以宠物店为例:
PetApi
类的新客户端时,它将创建自己的ApiClient
实例,除非您通过api_client
kw传递自己的实例(作为PetApi.api_client
)ApiClient
创建自己的RESTClientObject
(作为ApiClient.rest_client
)RESTClientObject
创建自己的urllib3.PoolManager
(作为RESTClientObject.pool_manager
)因此,这就是为什么您需要将所有新客户端设置为使用该特定ApiClient
实例的原因-如果不这样做,它们将使用默认设置创建自己的客户端。 我想如果您希望不同的API具有不同的PoolManager设置或其他功能,那可能会很有用。
这是如何设置并确保将其应用于所有宠物商店的API客户端的示例:
import swagger_client
api_client = swagger_client.ApiClient()
api_client.rest_client.pool_manager.connection_pool_kw['retries'] = 10
pet_api = swagger_client.PetApi(api_client=api_client)
user_api = swagger_client.UserApi(api_client=api_client)
store_api = swagger_client.StoreApi(api_client=api_client)
我刚刚在离线状态下对其进行了测试,并验证了urllib3进行了10次尝试,而默认值为3次
Sidenote / tangent :如果每次都很烦人,并且您不介意直接编辑生成的swagger_client库,则可以通过让ApiClient
自己实例化客户端并传递self
将其设置为默认行为ApiClient.__init__
,您可以执行以下操作:
from .apis import PetApi
self.pet_api = PetApi(api_client=self)
这样,您只需要创建ApiClient
并更新一次池管理器设置,就可以像api_client.pet_api.find_pets_by_status('foo')
这样通过它访问其他客户端,以后您通过ApiClient进行的任何更改都将反映在其中。分配给它的所有客户。 如果要创建多个客户端,则还不必为每个客户端重新设置客户端
感谢一吨@arcward ! 将尝试一下,让我知道是否有任何问题。
最有用的评论
@ dnome2您可以通过
ApiClient.rest_client.pool_manager
访问PoolManager。 如果要将更改应用到每个客户端,则需要直接创建ApiClient
,并确保在创建新的客户端对象时将其传递。以宠物店为例:
PetApi
类的新客户端时,它将创建自己的ApiClient
实例,除非您通过api_client
kw传递自己的实例(作为PetApi.api_client
)ApiClient
创建自己的RESTClientObject
(作为ApiClient.rest_client
)RESTClientObject
创建自己的urllib3.PoolManager
(作为RESTClientObject.pool_manager
)因此,这就是为什么您需要将所有新客户端设置为使用该特定
ApiClient
实例的原因-如果不这样做,它们将使用默认设置创建自己的客户端。 我想如果您希望不同的API具有不同的PoolManager设置或其他功能,那可能会很有用。这是如何设置并确保将其应用于所有宠物商店的API客户端的示例:
我刚刚在离线状态下对其进行了测试,并验证了urllib3进行了10次尝试,而默认值为3次
Sidenote / tangent :如果每次都很烦人,并且您不介意直接编辑生成的swagger_client库,则可以通过让
ApiClient
自己实例化客户端并传递self
将其设置为默认行为ApiClient.__init__
,您可以执行以下操作:这样,您只需要创建
ApiClient
并更新一次池管理器设置,就可以像api_client.pet_api.find_pets_by_status('foo')
这样通过它访问其他客户端,以后您通过ApiClient进行的任何更改都将反映在其中。分配给它的所有客户。 如果要创建多个客户端,则还不必为每个客户端重新设置客户端