Как заставить 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.
Другие вопросы по тегам