2017-02-23 2 views
1

私は自分のコードでいくつかの作業を行ういくつかのワーカースレッドを持っています。作品からのデータは、この情報を保持する小さなクラスに集められます。このクラスは、メインスレッドで処理するためにキューに入れられます。GCは2つのスレッドによるクラス参照をどのように収集しますか

このクラスはいつGCによって収集されますか?

ショートSoduのexcample:

def run(in_q, out_q): 
    lp = lpClass() 

    # Do work and add info in class 
    workToDo = in_q.get_nowait() 

    while working: 
    lp.add(work data) 

    out_q.put_nowait(lp) 


# main 

t = thread(run, in_q, out_q) 
t.start() 
in_q.put_nowait(some work) 
t.join() 

while out_q.not_empty: 
    lp = out_q.get() 

    print(lp.getData()) 

答えて

3

Pythonのガベージコレクタは、一般的に出てオブジェクトをスローし、もはや参照されています。

あなたのケースでは、これはwhileループのprint()が終了した後になり、lpの前のデータを新しい参照で置き換え始めます。したがって、古いオブジェクトはもはや参照されなくなり、ガベージコレクションされます。

Afaik、これはマルチスレッドプログラムとシングルスレッドプログラムでTrueを保持します。

pythonのドキュメントとは別に、this postには、Pythonのガベージコレクタがその機能を果たすことについてよく書かれています。

関連する問題