在Python

时间:2016-03-18 18:42:39

标签: python multithreading csv

我有一些代码可以进行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的东西,而东西不断添加到它?

1 个答案:

答案 0 :(得分:0)

无论您使用哪种结构替换列表,都必须在内部使用锁。例如,您可以使用queue,这是线程安全的,但它在内部使用锁。