, так что эта, казалось бы, простая проблема заставляет меня задуматься.
У меня есть набор данных (datas
), и я выполняю некоторую обработку (это не проблема, хотя это занимает время из-за размер набора данных) для создания нескольких строк, которые будут сохранены в файл CSV. Тем не менее, очень сложно создать строку, затем сохранить ее в CSV, затем создать строку, а затем сохранить ее и т. Д. c.
Так что я пытаюсь реализовать потоки производителей и потребителей - производители будут создайте каждую строку данных (чтобы ускорить процесс), сохраните в очереди, и один потребитель затем добавит в мой файл CSV.
Мои попытки, приведенные ниже, иногда приводят к успеху (данные сохраняются правильно) или в других случаях данные «обрезаются» (либо целая строка, либо ее часть).
Что я делаю не так?
from threading import Thread
from queue import Queue
import csv
q = Queue()
def producer():
datas = [["hello","world"],["test","hey"],["my","away"],["your","gone"],["bye","hat"]]
for data in datas:
q.put(data)
def consumer():
while True:
local = q.get()
file = open('dataset.csv','a')
with file as fd:
writer = csv.writer(fd)
writer.writerow(local)
file.close()
q.task_done()
for i in range(10):
t = Thread(target=consumer)
t.daemon = True
t.start()
producer()
q.join()