2017-06-22 18 views
0

私は300人以上のクライアントの時系列チャートで作業しています。 結合されたデータが膨大であり、場合によってはクライアントのデータがわずかに異なる方法で再サンプリングまたは操作されるため、各クライアントを個別にプルすることは有益です。PySolrを接続解除するにはどうしたらいいですか?

私の問題は、各クライアントデータを取得するためにループする関数が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

あなたは、少なくともオーバーヘッドたびに、接続を避けるために、各 'solr_data_pull'コールの間に生きているZK接続を維持することはできませんなぜ任意の理由は? – MatsLindh

答えて

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するget_session()方法を有するSolrの拡張であります。)

Zookeeperとの接続を切断するには、長期間実行していたセッションでは時計などを再設定する必要があります.y OUは、あなたの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. 
+0

返事をありがとう。 これは将来私を助けてくれるかもしれませんが、今は駄目です。 すべてのデータを1つのプルで取得し、クライアントを分割して個々の処理を行い、それらをマスターデータフレームに再結合する特別な機能を追加することにしました。 – GeorgeLPerkins

関連する問題