python - 如何让 PySolr 断开连接?

标签 python pandas solr pysolr

我正在为 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)))

最佳答案

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"""

(SolrCloudSolr 的扩展,它具有 get_session() 方法。)

要与 Zookeeper 断开连接 - 如果它是一个长时间运行的 session ,您可能不应该这样做,因为它必须再次设置监视等,您可以 use the .zk object directly在您的 SolrCloud 实例上 - 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.

关于python - 如何让 PySolr 断开连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44702822/

相关文章:

python - 链接运算符以识别记录最接近数字的值

python - 平面内矩形的面积

python - 使用 Python 的 Subprocess 库避免 SSH 密码提示

python - 将 pandas Excel Dataframe 复制到没有索引标题的剪贴板

mysql - SOLR mysql - 抱歉,没有定义数据导入处理程序

solr - Solr SuggestComponent 是否能够返回带状疱疹而不是整个字段值?

search - 每天索引中的文档

python - 在执行期间将后台命令输出 (stdout) 写入文件

python - Pandas 分组和过滤器

如果 ID 存在于其他数据框中,则 Python Pandas 数据框在新列中添加 "1"