我正在研究300多个客户的时间序列图表。 由于组合数据很大,因此对每个客户端进行单独拉取是有益的,在某些情况下,客户端数据会以稍微不同的方式重新采样或操作。
我的问题是,当请求完成并且函数返回数据时,我循环以获取每个客户端数据的函数打开3个新线程但从不关闭线程(我假设连接保持打开状态)。
获得客户的结果后,我想关闭该连接。我无法弄清楚如何做到这一点并且无法在我的搜索中找到任何内容。
def solr_data_pull(submitterId):
zookeeper= pysolr.ZooKeeper('ndhhadr1dnp11,ndhhadr1dnp12,ndhhadr1dnp13:2181/solr')
solr = pysolr.SolrCloud(zookeeper, collection='tran_timings', timeout=60)
query = ('SubmitterId:'+ str(submitterId) +' AND Tier:'+tier+' AND Mode:'+mode+' '
'AND Timestamp:['+ str(start_period)+' TO '+ str(end_period)+ '] ')
results = solr.search(rows=50000, q=[query], fl=[fl_list])
return(pd.DataFrame(list(results)))
答案 0 :(得分:1)
PySolr uses the Session
object from requests
as its underlying library(后者又使用urllib3s连接池),因此调用solr.get_session().close()
应关闭所有连接并排空池:
def close(self):
"""Closes all adapters and as such the session"""
(SolrCloud
是具有Solr
方法的get_session()
的扩展名。)
要断开与Zookeeper的连接 - 如果它是一个长时间运行的会话,你可能不应该再次设置手表等,你可以在你的SolrCloud
实例上use the .zk object directly - zk是KazooClient:
stop()
Gracefully stop this Zookeeper session.
close()
Free any resources held by the client.
This method should be called on a stopped client before
it is discarded. Not doing so may result in filehandles
being leaked.