【发布时间】:2010-07-26 18:44:26
【问题描述】:
我的代码使用 httplib 进行了一堆 https 调用。我想重用 httplib.py 连接对象,但如果我这样做了,我有时会得到CannotSendRequest 异常,因为连接最终处于奇怪的状态,因为其他一些代码在请求中途爆炸了。所以我想要的是一种缓存连接对象的方法,这样如果它处于有效状态,我们会重新使用它,但如果它不处于有效状态则重新连接。我在httplib.HTTPSConnection 上没有看到公共方法来告诉我连接是否处于有效状态。而且我很难捕捉到 CannotSendRequest 异常,因为它可能发生在代码中的很多地方。所以我想做的是这样的:
CONNECTION_CACHE = None
def get_connection():
global CONNECTION_CACHE
if (not CONNECTION_CACHE) or (CONNECTION_CACHE.__state != httlib._CS_IDLE):
CONNECTION_CACHE = httplib.HTTPSConnection(SERVER)
return CONNECTION_CACHE
但这失败了,因为__state 是私有的。有没有办法做到这一点?我可以修补 httplib 以公开 is_in_valid_state() 方法,但如果可以的话,我宁愿避免修补基础 python 库。
【问题讨论】: