Python

2016-03-18 11 views
0

'da çoklu okuma yaparken csv/listeye ekleme API çağrısı yapan, verileri biçimlendiren ve csv'ye ekleyen bir kodum var. İplik güvenliği ile ilgili endişeler nedeniyle, csv'ye yazmadan önce tüm satırları bir listede saklıyorum.Python

results = [] # list of lists, to be each list is a row for csv 
with futures.ThreadPoolExecutor(max_workers=64) as executor: 
    for data in executor.map(get_data, data_units): 
     extract_data(data) 
# write results to csv 

def get_data(data_unit): 
    # makes api call to get data for data_unit 
    return data 


def extract_data(data, results): 
    # turns data returned from api call into a list, and appends to results 
    row = formatted_data 
    results.append(row) 

Bunu yapmanın daha kanonik/daha hızlı bir yolu var mı? Ben burada cevabı Multiple threads writing to the same CSV in Python baktım ve yazmak için bir darboğaz neden nedeniyle API çağrıları yavaşlatacak çünkü yazmak için extract_data bir kilit koymak istemiyorum. Örneğin, sonuç listesi yerine kullanabileceğim başka bir veri yapısı var (iş parçacığı yığını gibi bir şey), csv'ye yazabilmem için bir şeyler fırlatabiliyordum.

+0

Kuyruk kullanın? https://docs.python.org/2/library/queue.html#module-Queue –

cevap

0

Listenizi değiştirmek için hangi yapıyı kullanırsanız kullanın, zorunlu kullanım dahili olarak kilitlenir. Örneğin, dişli olarak güvenli olan bir queue kullanabilirsiniz, ancak dahili olarak bir kilit kullanır.