2017-04-14 3 views
2

私はスレッドライブラリを使用していて、複数のスレッドを呼び出すスレッドを1つ持っています。このプログラムの背景には、ImageをキャプチャしてTCP-SocketServer上のクラスで利用できるようにするカメラがあります。Pythonでのスレッド内でのスレッドの作成

このように、カメラのキャプチャを実行するスレッドとTCPServerを実行する2番目のスレッドが必要ですが、このスレッド内には受信接続ごとにいくつかのスレッドがあります。

この最後のスレッドは、スレッドを単独で作成できるスレッドが必要であることを意味します。残念ながら、これはうまくいかなかった。

私は問題を表し小さなスニペットに巨大なコードを打破するために管理:funciton adderで作成した複数のスレッドがあるはずスレッドとして呼び出される関数creator

import threading 

def adder(x,res,i): 
     res[i] = res[i] + x*i; 

def creator(a,threads,results): 
    results = [] 
    for i in range(0,a): 
     results.append(0) 
     threads.append(threading.Thread(target=adder,args=(a,results,i))) 
     threads[i].start() 
    for i in range(0,len(threads)): 
     threads[i].join() 

    return results; 


threads = []; 
results = []; 

mainThread = threading.Thread(target=creator,args=([5,threads,results])) 
mainThread.start() 

mainThread.join() 
for i in range(0,len(results)): 
    print results[i] 
    print threads[i] 

を。

結果は空ですが、どうしてそうですか?

これは私の大きなプログラムで発生するのと同じ問題です。

+0

Pythonのスレッドが持っていないような方法( '.terminate()'):だから、ここで、だけでなく、マイナーなローカルの変更でコードより「Python的」を作るためにすることを修復するためにばらつきがあります開始されました。参照:http://stackoverflow.com/questions/323972/is-there-any-way-to-kill-a-thread-in-python –

+0

Pythonスレッドには '.stop()'メソッドがありません。コード_これで例外が発生するはずです。既に与えられたリンクを参照してください。Pythonはスレッドを強制的に停止させる組み込みの方法をサポートしていません。 –

+0

それは不思議そうに働いた。しかし、私は今、単純なタスクを持って、すべてのスレッドが参加するのを待つスレッドに置き換えましたが、結果はまだ空です。そして、NoneTypeにjoinという関数がないという通知を受け取ります。 – Kev1n91

答えて

3

あなたは近くにいる! :-)

コードの最新バージョンでの問題は、グローバルresultscreator()に渡されている間、creator()はそれを使用したことがない、ということである:それは、独自のローカルresultsリストを作成します。もちろん、後者を変更することは、グローバルresultsには影響しません。そのため、空のままです。かかわらず、彼らがきたかどうかの -

import threading 

def adder(x, res, i): 
    res[i] += x*i 

def creator(a, threads, results): 
    for i in range(a): 
     results.append(0) 
     t = threading.Thread(target=adder, args=(a, results, i)) 
     threads.append(t) 
     t.start() 
    for t in threads: 
     t.join() 

threads = [] 
results = [] 

mainThread = threading.Thread(target=creator, args=(5, threads, results)) 
mainThread.start() 
mainThread.join() 
for i in range(len(results)): 
    print results[i] 
    print threads[i] 
+0

もちろん、継続的な助けをありがとう – Kev1n91

関連する問題