'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.
Kuyruk kullanın? https://docs.python.org/2/library/queue.html#module-Queue –