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に書き込むためのものをポップすることができます。
キューを使用しますか? https://docs.python.org/2/library/queue.html#module-Queue –