2016-03-18 14 views
0

私はAPI呼び出しを行い、データをフォーマットし、csvに追加するコードをいくつか持っています。スレッドの安全性が懸念されるため、csvに書き込む前にすべての行をリストに格納します。Pythonでマルチスレッド中にcsv/listを追加する

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) 

もっと標準的な方法がありますか?私はここでの答えをMultiple threads writing to the same CSV in Pythonで見てきました。スレッドのボトルネックを引き起こす原因となるため、API呼び出しの速度が遅くなるため、extract_dataにロックをかけたくありません。例えば、結果リスト(スレッドセーフスタックのようなもの)の代わりに使用できる別のデータ構造があるのですが、CSVに書き込むためのものをポップすることができます。

+0

キューを使用しますか? https://docs.python.org/2/library/queue.html#module-Queue –

答えて

0

リストを置き換えるために使用する構造に関係なく、内部的にロックを強制的に使用します。たとえば、queueを使用できます。これはスレッドセーフですが、内部的にロックを使用します。

関連する問題