2016-03-27 24 views
1

gelen bir sözlük oluşturmak için nasıl başka bir işlevi iç içe Aşağıdaki kodu (yani bu standının her türlü yalnız dosyası değil) var:Python Threading: Sonuçların

train_set_percentages = [0.2,0.5,0.8,1.0] 
results = {} 

for i in range(len(train_set_percentages)): 
    kf2_index_percent,kf5_index_percent,loo_index_percent = generate_data_entry(train_set_percentages[i]) 
    results[kf2_index_percent[0]] = kf2_index_percent[1] 
    results[kf5_index_percent[0]] = kf5_index_percent[1] 
    results[loo_index_percent[0]] = loo_index_percent[1] 

generate_data_entry üç dizilerini döndürür kf2_index...etc.. Son sözlüğümdeki tüm tuplelere (anahtar, veri) ihtiyacım var.

Ben:

import threading 
from threading import Thread 

Ancak, ben nasıl fonksiyonun çıkışından bu sözlüğü oluşturmak için hiçbir fikrim yok. Sadece 5 eğitim seti yüzdesi var, bu yüzden bunları paralel olarak nasıl çalıştırırım ve sözlüğü nasıl oluşturabilirim?

for i in range(len(train_set_percentages)): 
    Thread(target=generate_data_entry(train_set_percentages[i])) 

O zaman ... ??

+1

http://stackoverflow.com/questions/6893968/how-to-get-the-return-value-from-a-thread-in -python –

+0

Tamam, bunun için teşekkürler ... bu kadar beklendiği gibi, silemiyorum. Bir cevap oluşturabilir ve bunu sözlük arama etiketiyle nasıl genel bir konu haline getirebilirim diye göreceğim. – bordeo

cevap

1

Sorunun altındaki bağlantıda bir çözüm buldum. Yukarıda tarif edilen şekilde bir sözlük üretmek için, içinde

from threading import Thread 

numbers = [1,2,3,4] 
keys = ['one','two','three','four'] 

def add_to_dict(number,key,dict): 
    dict[key] = number 

n = 5 

dict_list = [{}] * 5 
threads = [None] * 5 

# run threads 
for i in range(len(threads)): 
    threads[i] = Thread(target=add_to_dict,args=(number[i],keys[i],dict_list[i])) 
    threads[i].start() 
for i in range(len(threads)): 
    threads[i].join() 

# merge dictionaries (using Python 3.5 syntax) 
results = {} 
for i in dict_list: 
    results = {**results,**i}