Python код работает несколько раз глюк - PullRequest
0 голосов
/ 04 мая 2020

Я работаю над разработкой датчика температуры. Температуры считываются на внешнем оборудовании (Raspberry Pi) и записываются. Я построил простой GUI (построенный с PyQt), который позволяет мне настраивать датчики, а также отображать журнал температуры в виде таблицы.

Моя проблема: все работает, примите во внимание тот факт, что все данные вставляются в таблицу несколько раз (3 или 4).

Я сделал несколько проблем при съемке, добавив несколько отпечатков здесь и там и обнаружил, что он не только добавляет в таблицу несколько раз, но и выполняет все в этой части кода несколько раз:

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('raspberrypi.local', port=22, username='pi', password='raspberry')
ftp_client = ssh.open_sftp()        #connecting to ssh client
time.sleep(0.2)

info = ftp_client.stat('/home/pi/temp_logs/' + theselectedsession + '.csv')      #opens the temperature log as saved as .csv 
filesize = info.st_size
with ftp_client.open('/home/pi/temp_logs/' + theselectedsession + '.csv', mode='r') as currentcsvfile:
    csv_reader = csv.reader(currentcsvfile, delimiter=',')
    time.sleep(0.2)
    if filesize == 0:  #check if file is empty
        pass

    else:
        global ncol
        ncol = len(next(csv_reader))  # Read first line and count columns
        currentcsvfile.seek(0)  # go back to beginning of file
        print(ncol)
        global line_count
        line_count = 0
        time.sleep(0.1)

        try:
            global last_line

            for row in csv_reader:
                rowPosition = self.tableWidget.rowCount()  #set number of columns of PyQt table widget
                self.tableWidget.insertRow(rowPosition)
                self.tableWidget.setColumnCount(ncol)

                if line_count == 0:   #sets first row as headers
                    tempheasd = []

                    for i in range(ncol):
                        tempheasd.append(str(row[i]))

                    self.tableWidget.setHorizontalHeaderLabels(tempheasd)

                else:
                    for i in range(ncol):
                        self.tableWidget.setItem(rowPosition, i, QtGui.QTableWidgetItem(row[i]))  #adds to table widget

                print(f'\t{row[0]} {row[1]} {row[2]}.')  #print made for troubleshooting purposes
                line_count += 1
                last_line = row
        except:
            pass

        print(f'Processed {line_count} lines.')  #print number of lines processed
        self.tableWidget.resizeColumnsToContents()

ftp_client.close()
ssh.close()

time.sleep(0.2)

Это вывод, который я получаю:

9
9
9

DateTime Sensor1 DateTime.  DateTime Sensor1 DateTime.
2020-04-29 17:14:47.565036 21.562 2020-04-29 17:14:50.444952.
2020-04-29 17:14:59.084945 21.562 2020-04-29 17:15:01.964533.
2020-04-29 17:15:10.845012 21.562 2020-04-29 17:15:13.724539.


DateTime Sensor1 DateTime.  DateTime Sensor1 DateTime.
2020-04-29 17:14:47.565036 21.562 2020-04-29 17:14:50.444952.
2020-04-29 17:14:59.084945 21.562 2020-04-29 17:15:01.964533.
2020-04-29 17:15:10.845012 21.562 2020-04-29 17:15:13.724539.

DateTime Sensor1 DateTime.  DateTime Sensor1 DateTime.
2020-04-29 17:14:47.565036 21.562 2020-04-29 17:14:50.444952.
2020-04-29 17:14:59.084945 21.562 2020-04-29 17:15:01.964533.
2020-04-29 17:15:10.845012 21.562 2020-04-29 17:15:13.724539.

Processed 12 lines.
Processed 12 lines.
Processed 12 lines.

Как видите, все напечатано 3 раза.

Я также хотел бы отметить, что из-за недостатка знаний python я использовал обычную многопоточность вместо QThreading, что, как теперь я знаю, может вызвать проблемы.

Может ли это быть связано с моей проблемой? Или это что-то совсем другое?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...