2016-04-18 10 views
0

私は、ある時点でメインスレッドとは独立した3つのスレッドを持つことがわかっている小さなアプリケーションに取り組んでおり、別のスレッドからスレッドを識別する必要があります。スレッドがA,B,Cであるとします。何かが発生した場合、ACと参加する必要があります。私はそれらを開始する前に、辞書にスレッドを追加しようとしていますので、私は後でスレッドCを識別することができますPython threading.Thread()はNoneTypeを返しますか?

currentThreads['A'] = threading.Thread(target=func, args=[]]). 
currentThreads['A'].start() 
currentThreads['B'] = threading.Thread(target=func, args=[]).start() 
currentThreads['B'].start() 

行動は奇妙です:時々両方currentThreads[key].start()歩留まりAttributeError: 'NoneType' object has no attribute 'start'、時には唯一currentThreads['B'].start()はありません。

これがなぜ起こるのか?

+0

なぜ「B」スレッドを2回開始するのですか? –

+0

Damn。 \ –

答えて

1

を、引き上げるcurrentThreads['B'].start()を呼び出すことです名前のように:

t = threading.Thread(name='my_service', target=func) 

次にwスレッドの名前を確認する必要があります。getName()

current_thread_name = threading.currentThread().getName() 
+0

うん、うまくいく。ありがとう –

+1

他の人が現在のスレッドから他のスレッドにアクセスする方法を探しているかもしれないので、提案。 'threading.enumerate'をチェックする価値があります。これは、現在生きているスレッドのリストを返します。上で設定した名前で必要なものを特定することができます。 –

+0

@BujancaMihai ..正.. –

1

start戻っNoneはそうではこれは次のとおりです。

currentThreads['B'] = threading.Thread(target=func, args=[]).start() 

currentThreads['B']Noneは、このように実際にそれらを与えるために、あなたのスレッドに参照名を維持するために、私はあなたにお勧めAttributeError

+0

本当に、私は 'start'を2回呼んでいたことに気付かなかった –

関連する問題