Как заставить 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)))
1 ответ
PySolr использует Session
объект из requests
в качестве базовой библиотеки (которая, в свою очередь, использует пул соединений urllib3s), вызывая solr.get_session().close()
следует закрыть все соединения и слить бассейн:
def close(self):
"""Closes all adapters and as such the session"""
(SolrCloud
является продолжением Solr
которые имеют get_session()
Метод.)
Для отключения от Zookeeper - что вам, вероятно, не следует делать, если это длительный сеанс, так как он должен будет снова настроить часы и т. Д., Вы можете использовать объект.zk прямо на вашем 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.