【发布时间】:2012-09-26 14:40:17
【问题描述】:
基本上:有没有办法告诉(Python 2.7)套接字何时超时,是因为没有向套接字传递任何内容还是因为网络连接断开?
我有一个 Python 应用程序,它将长时间(>30 天)连接到 Twitter 流 API。每当发送推文时,应用程序都会从套接字的缓冲区读取,但如果没有发送推文,则读取命令将超时并抛出 SSLError。
这是读取/超时发生的 sn-p:
try:
d = resp.read(1)
return d
except SSLError as e:
# the read timed out, nothing was read
return None
except Exception as e:
log.error('Error reading from stream : {0}'.format(e))
我在创建HTTPSConnection 时设置了超时,目前设置为 30 秒。因此,如果 30 秒内没有读取任何推文,resp.read 命令将超时并抛出 SSLError,所以我忽略(通过返回 None,这是从这个 sn-p 处理的上一级)然后再读取 30 秒.问题是,如果网络断开连接,即使它在不久之后重新连接,套接字似乎也不会再次开始读取,只会继续超时。解决此问题的唯一方法是重新连接,这很好,因为网络断开连接很少见。我可以将超时设置得非常高,并在每次超时时重新连接,但这会增加我的应用程序无法运行的时间,因为有人拔掉了网络电缆。我可以将超时设置为低以最大程度地减少停机时间,但是当没有阅读任何推文时,我会不必要地重新连接。
有没有办法根据抛出的SSLError来区分原因?
【问题讨论】:
标签: python twitter twitter-streaming-api