2011-01-18 6 views
2

私は60個のオブジェクトからなるグループを持っています。それぞれのオブジェクトは自分自身でthreading.Threadを持っています。 Pythonのロックなどでサブプロセスを生成するには、multiprocessing.Processを使用してサブプロセスを生成し、に6 Threadsを使用しました。 obj []インデックスがProcessの数を表し、obj [] []の各要素がThreadsというオブジェクトの1つであるように、オブジェクトを2次元のlistに分割しました。だからここ内訳です:Pythonのサブプロセス内にスレッドを生成する

# break the objects out into my 2D list 
obj= [] 
for i in all_obj: 
    if len(obj) == 0 or len(obj[len(obj)-1]) > 5: 
    obj.append([]) 
    obj[len(obj)-1].append(i) 

# spawn processes 
processes = [] 
for i in obj: 
    processes.append(Process(target=proc_run,args=(i)) 
    processes[len(processes)-1].start() 

# process target 
def proc_run(my_objs): 
    threads = [] 
    for ad in my_objs: 
    threads.append(Thread(target=thread_run,args=(ad)) 
    threads[len(threads)-1].start() 

# thread target 
def thread_run(my_obj): 
    for i in range(1,21): 
    ## do some stuff with the object here 
    pass 
    logging.info("Thread for object <%s> finished."%(my_obj.prop)) 

問題は、私はstart()呼び出しの後join()を追加しない限り、スレッドが実際に産卵されていないということです。これはマルチスレッドへの私の欲求を排除するので(私はちょうどforループを使用して同じことを達成することができます)、私は何をすべきか完全にはわかりません。

このスレッディングの場合、私は全然ノーと言えるので、答えが曖昧になればなるほど、関係するすべての人にとって簡単になります。ありがとう。

答えて

2

Pythonは基本的にスレッドを使ってプロセスを起動するので、60プロセスを使用することに決めました。これは私が目指しているのと同じことを(基本的に)許すべきです。それはちょうどタスクマネージャのプロセスタブを少し爆破させるでしょう。 ;)

Process
+0

回答を「受け入れる」(その横のチェックマークをクリックする)ことができます。それは、それがあなたの質問に対する(最良の)答えと信じていることを示すでしょう。 –

+0

ええ、私は行くつもりでしたが、私は2日間はできないと言います。それはむしろ迷惑ですが、私は知っていますが、何をするつもりですか? – Andy

0

multiprocessingの少なくとも一部のバージョンでは)工程(従って、すべてのスレッド)とすぐにtarget関数リターンを殺します。あなたはjoin()にスレッドが完了した後に起こるようにする必要がありますが、join()をループの外側に置き、を待ち、をすべて実行します。

関連する問題