我有一些代码可以进行API调用,格式化数据并将其附加到csv。由于担心线程安全,我在写入csv之前将所有行存储在列表中。
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,我不想在extract_data中设置一个锁来写,因为它会减慢API调用,因为它会导致线程写入瓶颈。例如,我可以使用另一个数据结构而不是结果列表(类似于线程安全堆栈),我可以弹出写入csv的东西,而东西不断添加到它?