【发布时间】:2019-10-07 20:36:48
【问题描述】:
我从 thread_1 获取鼠标坐标(mouse_x,mouse_y),它适用于 tkinter。 我有另一个线程(thread_2)同时工作以使用opencv同时进行凝视方向估计(gaze_x,gaze_y)
现在我想将它们同时写在同一个 csvfile 上,而如果任何数据为 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 文件.... 我将不胜感激任何帮助... 最好的问候
编辑:我需要同时记录两个数据。在这里,我需要记录对象正在查看的目标(此处为鼠标指针)的非常精确的位置以及该对象的注视方向。我需要在给定的确切时刻将它们都写在同一行上,以便我可以关联。难道没有人同时采样两列数据进行关联吗?
【问题讨论】:
-
"现在我想将它们同时写入同一个 csvfile": 你为什么要这样做?得到写冲突?为了避免这种确切的情况(序列化写入),编写了很多代码(可能还有硬件接线)。幸运的是,您不能这样做,因为wiki.python.org/moin/GlobalInterpreterLock。还考虑到磁盘访问与 RAM 相比非常慢,在内存中尽可能多地计算会快得多,并且只写入大块,以减少写入次数(尽管缓冲发生在多个级别)。
-
您使用互斥体(锁)一次只允许一个线程写入。您刷新文件输出以确保始终将整行写入 htread。
标签: python export-to-csv python-multithreading