gpt4 book ai didi

python - 多个线程在 Python 中写入同一个 CSV

转载 作者:太空狗 更新时间:2023-10-29 22:09:08 29 4
gpt4 key购买 nike

我是 Python 多线程的新手,目前正在编写附加到 csv 文件的脚本。如果我要将多个线程提交给一个 concurrent.futures.ThreadPoolExecutor,它将行附加到一个 csv 文件。如果附加是这些线程执行的唯一与文件相关的操作,我该怎么做才能保证线程安全?

我的代码的简化版本:

with concurrent.futures.ThreadPoolExecutor(max_workers=3) as executor:
for count,ad_id in enumerate(advertisers):

downloadFutures.append(executor.submit(downloadThread, arguments.....))
time.sleep(random.randint(1,3))

我的线程类是:

def downloadThread(arguments......):

#Some code.....

writer.writerow(re.split(',', line.decode()))

我应该设置一个单独的单线程执行器来处理写入,还是我只是追加是否值得担心?

编辑:我应该详细说明,写入操作发生的时间可能会随着下一次附加文件之间的分钟数而有很大差异,我只是担心在测试我的脚本时没有发生这种情况,我更愿意被覆盖那个。

最佳答案

我不确定 csvwriter 是否线程安全。 documentation没有指定,所以为了安全起见,如果多个线程使用同一个对象,您应该使用 threading.Lock 来保护使用:

# create the lock
import threading
csv_writer_lock = threading.Lock()

def downloadThread(arguments......):
# pass csv_writer_lock somehow
# Note: use csv_writer_lock on *any* access
# Some code.....
with csv_writer_lock:
writer.writerow(re.split(',', line.decode()))

话虽如此,downloadThread 将写入任务提交给执行程序可能确实更优雅,而不是像这样显式地使用锁。

关于python - 多个线程在 Python 中写入同一个 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33107019/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com