gpt4 book ai didi

python - 如何将来自Python中多个线程的同时数据写入csv文件

转载 作者:太空宇宙 更新时间:2023-11-03 20:18:53 24 4
gpt4 key购买 nike

我从 thread_1 获取鼠标坐标(mouse_x,mouse_y),它与 tkinter 一起使用。我有另一个线程(thread_2)同时工作,以同时使用 opencv 进行注视方向估计(gaze_x,gaze_y)

现在我想将它们同时写入同一个 csv 文件中,而如果任何数据为 None 则不写入。

我可以从每个线程获取一个 tmp 文件来写入 csv 文件,但不能同时执行

with open(csv_filename, 'w', newline='') as csvfile:
writer = csv.writer(csvfile, dialect=csv.excel, delimiter=',',
quotechar='|', quoting=csv.QUOTE_MINIMAL)
writer.writerow(["mouse_x","mouse_y","gaze_x","gaze_y"])

def get_mouse_coordinates():
def motion(event):
x, y = event.x, event.y
tmp = [x, y]
with open(csv_filename, 'a+', newline='') as csvfile:
writer = csv.writer(csvfile, delimiter=',',
quotechar='|', quoting=csv.QUOTE_MINIMAL)
writer.writerow(list(tmp))
t1 = Thread(target=get_mouse_coordinates)
t1.start()


def get_gaze_coordinates
.....
gaze_x,gaze_y = ....

t2 = Thread(target=get_gaze_coordinates)
t2.start()

我尝试写入单独的冒号,但 csv 文件无法同时填充......我将不胜感激任何帮助...最好的问候

编辑:我需要同时记录两个数据。在这里,我需要记录主体正在注视的目标(此处为鼠标指针)的非常精确的位置以及该主体的注视方向。我需要在给定的精确时刻将它们都写在同一行上,以便我可以关联。没有人同时采样两列数据进行关联吗?

最佳答案

要将数据同时从多个线程写入单个文件,应创建同步机制。例如 - 另一个线程:

queuForSync1 = queue.Queue(1)
queuForSync2 = queue.Queue(1)
t1 = Thread(target=get_mouse_coordinates, args=(queuForSync1,))
# in get_mouse_coordinates you have to: queuForSync1.put(dataFromThread1)
t1.start()
...
t2 = Thread(target=get_gaze_coordinates, args=(queuForSync2,))
# in get_gaze_coordinates you have to: queuForSync2.put(dataFromThread2)
t2.start()
...
tSync = Thread(target=syncThread, args=(queuForSync1, queuForSync2, fileName))
tSync.start()
...
def syncThread(q1, q2, fileName):
dataFromThread1 = None
dataFromThread2 = None
with open(fileName, 'a+', newline='') as csvfile:
writer = csv.writer(csvfile, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL)
while True: # Here - a sync Event May be used to get out of the Loop and Join Thread Nicely
try:
dataFromThread1 = q1.get(block=False)
except Exception as ex:
pass
# ... same for dataFromThread2
if dataFromThread1 is not None and dataFromThread2 is not None :
writer.writerow(list(dataFromThread1, dataFromThread2)) # Here data will be written Into File.
csvfile.flush() # Important

此外 - 如果来自线程 1 的数据不变,而来自线程 2 的数据连续变化 - 可能会创建一个缓冲区,用于存储从线程接收的最后数据。

关于python - 如何将来自Python中多个线程的同时数据写入csv文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58276809/

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