我正在使用python requests库发送POST请求并从迭代器中读取数据。
如果迭代器快速生成数据,则所有数据都能完美运行。
问题是我的迭代器有时“休息一下”,服务器由于不活动而断开连接,我的客户端在套接字级别引发Broken pipe
异常。我无法避免源迭代器上的暂停,因为它们取决于计算时间。
服务器是SOLR,但我认为这应该是一个更普遍的问题。
更确切地说,情况是这样的(我正在简化,因为原始代码非常复杂):
import requests
def myObjectsIter():
#this generator yields custom objects and sometimes pauses
def myObjectsSerializerIter():
yield "<add>"
for o in myObjectsIter():
#o.serialize returns an XML string for SOLR update (<doc>...</doc>)
yield o.serialize()
yield "</add>"
requests.post("http://mysolr/mycore/update", data=myObjectsSerializerIter())
#When myObjectsIter pauses for more than (i think) 60 seconds the last call raises [Errno 32] Broken pipe
有没有人知道避免这种情况的好习惯?