首页 > 解决方案 > csv 在线程或进程中写入函数:我应该使用哪个循环或任何其他建议?

问题描述

目前,与 UI 按钮连接的 while 循环导致 UI 停止。在 while 循环中,它将来自 TCP/IP 的数据存储到 csv 写入文件中(采样率 60Hz,~16ms)。几秒钟后单击录制按钮后,UI 将停止。

有解决此问题的建议吗?我尝试了多处理,但它似乎不起作用,或者我可能无法正确编码多处理。

代码流程如下

  1. 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...

感谢您花时间在这里。对此,我真的非常感激!

标签: multithreadingcsvwhile-loopmultiprocessinguibutton

解决方案


推荐阅读