2013-03-11 3 views
0

Я хочу получить результат из моих потоков в списке.python threading issue

У меня есть следующий код:

def parallelizer_task(processor,input,callback): 
    output = processor(input) 
    if callback: 
     callback(output) 
    return output 

class ThreadsParallelizer(Parallelizer): 

    def parallelize(self,processors,input=None,callback=None): 
     threads = [] 
     for processor in processors: 
      t = threading.Thread(target=parallelizer_task,args=(processor,input,callback)) 
      threads.append(t) 
      t.start() 
     return threads 
parallelizer = ThreadsParallelizer 

Но у меня есть выход список нитей, как;

* <Thread(Thread-1, started 4418719744)> 
* <Thread(Thread-2, started 4425617408)> 
* <Thread(Thread-3, started 4429950976)> 

Есть ли способ, чтобы потоки были в списке?

ответ

1

Да, для этого вы можете использовать, например, join. Это заставит основной поток ждать, пока дочерние потоки не закончат работу. Затем вы можете сохранить данные в threading.Thread объектах, примерно так:

def parallelizer_task(processor,input,callback): 
    output = processor(input) 
    if callback: 
     callback(output) 

    # Attach result to current thread 
    thread = threading.currentThread() 
    thread.result = output 


class ThreadsParallelizer(Parallelizer): 

    def parallelize(self,processors,input=None,callback=None): 
     threads = [] 
     for processor in processors: 
      t = threading.Thread(...) 
      threads.append(t) 
      t.start() 

     # wait for threads to finish 
     for th in threads: 
      th.join() 

     # do something with results 
     results = [th.result for th in threads] 
     return results 
+0

, которые помогли много .. спасибо – tunaktunak