multithreading - csv 在线程或进程中写入函数:我应该使用哪个循环或任何其他建议?
问题描述
目前,与 UI 按钮连接的 while 循环导致 UI 停止。在 while 循环中,它将来自 TCP/IP 的数据存储到 csv 写入文件中(采样率 60Hz,~16ms)。几秒钟后单击录制按钮后,UI 将停止。
有解决此问题的建议吗?我尝试了多处理,但它似乎不起作用,或者我可能无法正确编码多处理。
代码流程如下
- UI => 2) 单击录制按钮 => 3) TCP/IP (采样 60Hz) with time.sleep(0.016) => 4) 将数据存储到 csv 文件 => 5) 录制停止按钮不起作用(无法单击) 因为 UI 停止。
=> 但是,即使我强制退出 UI,数据也会保存在 csv 文件中。
1) UI 视图控制
import connect(调用录音函数的脚本)
def __init__(self, window):
self.setupUi(window)
self.tableWidget.setRowCount(9)
# skip....
self.pushButton_13.clicked.connect(self.recording_data)
self.record_start = connect.record()
# pressed => True when the button is clicked.
def recording_data(self, pressed):
if pressed:
self.record_start.thread_record(pressed)
2) 连接.py
class record:
def __init__(self):
#record_thread.py (in the script, class record_threading)
self.record = record_thread.record_threading()
self.is_on = False
def thread_record(self,pressed):
while pressed == True:
self.is_on = pressed
self.thread = Process(target=self.record.record(self.is_on))
self.thread.start()
self.thread.join()
# self.is_on ~ if it can call the state change of the button, at this state.
# how can I update the recording button state (True => False)?
# I can't figure it out how I can get False signal from the button in UI
self.is_on = self.return_func()
if self.is_on == False:
self.thread.terminate()
3) 记录线程.py
def record(self,pressed):
csvfile = open('file.csv', 'w')
writer = csv.writer(csvfile)
# skip...
感谢您花时间在这里。对此,我真的非常感激!
解决方案
推荐阅读
- java - 未加载特定于环境的 Eureka 属性
- excel - 使用超链接公式跳转到活动单元格
- amazon-web-services - 从经理那里检索一个秘密并在 ec2 cfn-init 中使用它
- android - 如何使我的应用程序可供 Play 商店中的用户使用
- vb.net - Visual Basic,使应用程序仅在特定文件夹中打开
- wpf - 在现有应用程序中设置自动化 ID
- python - 在将数据传递给插值例程之前存储数据
- kubernetes - 如何通过一个入口在裸机上使用多域
- backbone.js - 如何从自身调用布局以创建实例
- android - 使用 Android Jetpack Navigation 时如何禁用导航图标