Почему мой второй поток вообще не выполняется? - PullRequest
0 голосов
/ 09 июля 2020

У меня есть GUI, который принимает значения, и при нажатии кнопки на GUI получает блок данных с моего сервера и помещает их в очередь, а использование потоков вызывает две функции recvData () и calculate_threshold . Первая функция - продолжать получать блоки данных с сервера и помещать их в очередь, тогда как вторая функция - постоянно удалять блоки данных из очереди и выполнять с ними некоторые вычисления перед записью результатов в файл. Он продолжает делать это, пока очередь не станет пустой.

Ниже мой код клиента:


import socket
import turtle
#import time
import queue
import threading
from tkinter import *

class GUI:
    entries = []
    def __init__(self, master):
        self.master = master
        master.title("Collision Detection")

        self.buff_data = queue.Queue()

        self.t1 = threading.Thread(target = self.recvData)
        self.t2 = threading.Thread(target=self.calculate_threshold)
        self.entries = []

        self.host = '127.0.0.1'
        self.port = 5000
        self.s = socket.socket()
        self.s.connect((self.host, self.port))

        self.create_GUI()

    def create_GUI(self):

    
        self.input_label = Label(root, text = "Input all the gratings set straight wavelength values in nm")
        self.input_label.grid(row = 0)
    
        self.core_string = "Core "
        self.label_col_inc = 0
        self.entry_col_inc = 1
        self.core_range = range(1, 5)

        for y in self.core_range:
            self.core_text = self.core_string + str(y) + '_' + '25'
            self.core_label = Label(root, text = self.core_text)
            self.entry = Entry(root)
            self.core_label.grid(row=1, column=self.label_col_inc, sticky=E)
            self.entry.grid(row=1, column=self.entry_col_inc)
            self.entries.append(self.entry)
            self.label_col_inc += 2
            self.entry_col_inc += 2
    
        self.threshold_label = Label(root, text = "Threshold in nm")
        self.entry_threshold = Entry(root)

        self.threshold_label.grid(row = 2, sticky = E)
        self.entry_threshold.grid(row = 2, column = 1)
    
        self.light_label = Label(root, text = 'Status')
        self.light_label.grid(row = 3, column = 3)

        self.canvas = Canvas(root, width = 150, height = 50)
        self.canvas.grid(row = 4, column = 3)
    
        # Green light
        self.green_light = turtle.RawTurtle(self.canvas)
        self.green_light.shape('circle')
        self.green_light.color('grey')
        self.green_light.penup()
        self.green_light.goto(0,0)

        # Red light
        self.red_light = turtle.RawTurtle(self.canvas)
        self.red_light.shape('circle')
        self.red_light.color('grey')
        self.red_light.penup()
        self.red_light.goto(40,0)
    
        self.data_button = Button(root, text = "Get data above threshold", command = self.getData)
        self.data_button.grid(row = 5, column = 0)

        len_message = self.s.recv(4)
        print('len_message', len_message)
        bytes_length = int(len_message.decode('utf-8'))  # for the self-made server
        recvd_data = self.s.recv(bytes_length)
        print('data', recvd_data)
        self.buff_data.put(recvd_data)
        #print('buffer', self.buff_data)
        self.t1.start()
        self.t2.start()

      
    def recvData(self):
        len_message = self.s.recv(4)
        print('len_message', len_message)
        while len_message:
            bytes_length = int(len_message.decode('utf-8'))  # for the self-made server
            recvd_data = self.s.recv(bytes_length)
            print('data', recvd_data)
            self.buff_data.put(recvd_data)
            len_message = self.s.recv(4)
            print('len_message', len_message)

        else:
            print('out of loop')
        self.s.close()


    def calculate_threshold(self):
        while not self.buff_data.empty:
            rmv_data = self.buff_data.get()
            stringdata = rmv_data.decode('utf-8')
            rep_str = stringdata.replace(",", ".")
            splitstr = rep_str.split()

            # received wavelength values
            inc = 34
            wav_threshold = []
            for y in self.entries:
                straight_wav = float(y.get())
                wav = float(splitstr[inc])
                wav_diff = wav - straight_wav
                if wav_diff < 0:
                    wav_diff = wav_diff * (-1)
                wav_threshold.append(wav_diff)
                inc += 56

            threshold = float(self.entry_threshold.get())
            # writing into the file
            data = []
            inc1 = 0
            col1 = 2
            col2 = 6

            data.insert(0, (str(splitstr[0])))
            data.insert(1, (str(splitstr[1])))

            for x in wav_threshold:
                if (x > threshold):
                    self.red_light.color('red')
                    self.green_light.color('grey')
                    data.insert(col1, (str(splitstr[34 + inc1])))
                    data.insert(col2,(str(x)))
                else:
                    self.red_light.color('grey')
                    self.green_light.color('green')
                    data.insert(col1,'-')
                    data.insert(col2,'-')
                inc1 += 56
                col1 += 1
                col2 += 1

            self.write_file(data)



# function to write into the file
    def write_file(self,data):
        with open("Output.txt", "a") as text_file:
            text_file.write('\t'.join(data[0:]))
            text_file.write('\n')

if __name__ == '__main__':
    root = Tk()
    gui = GUI(root)
    root.mainloop()

Код моего сервера:


import socket
import threading
import os
    
def Main():
    host = '127.0.0.1'
    port = 5000
    s = socket.socket()
    s.bind((host,port))
    s.listen(5)
    print("Server started")
    
    while True:
        c,addr = s.accept()
        print("Client connected ip:<" + str(addr) + ">")
       
       
        c.sendall('1685 2020/03/02  14:42:05    318301  4   1   25  0   0   0   0   1513,094    1516,156    1519,154    1521,969    1525,029    1527,813    1530,921    1533,869    1536,740    1539,943    1542,921    1545,879    1548,843    1551,849    1554,760    1557,943    1560,782    1563,931    1566,786    1569,751    1572,690    1575,535    1578,638    1581,755    1584,759    41  39  33  39  48  44  49  55  61  58  64  55  68  74  68  59  57  74  61  68  58  64  54  47  46  2   25  0   0   0   0   1512,963    1515,935    1518,857    1521,849    1524,655    1527,577    1530,332    1533,233    1536,204    1539,488    1542,571    1545,725    1549,200    1552,430    1555,332    1558,484    1561,201    1564,285    1567,001    1569,870    1572,758    1575,491    1578,512    1581,547    1584,405    48  43  37  42  57  54  59  62  67  58  71  59  77  82  82  64  71  88  77  79  72  73  63  49  50  3   25  0   0   0   0   1513,394    1516,517    1519,536    1522,082    1525,428    1527,963    1531,288    1534,102    1536,659    1539,757    1542,707    1545,627    1548,389    1551,459    1554,406    1557,986    1560,667    1564,103    1567,036    1570,144    1573,189    1575,888    1579,185    1582,323    1585,338    35  36  32  37  57  58  61  64  75  73  70  62  61  62  59  51  52  64  58  62  70  70  64  54  55  4   25  0   0   0   0   1512,658    1515,752    1518,797    1521,707    1524,744    1527,627    1530,871    1534,002    1537,086    1540,320    1543,217    1546,010    1548,660    1551,385    1554,253    1557,074    1560,193    1563,116    1566,043    1568,963    1571,855    1574,957    1577,954    1581,128    1584,273    43  42  39  40  56  50  56  62  65  54  59  62  75  79  73  63  67  77  73  75  68  62  54  51  51  100 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN'.encode())
      
        c.sendall('1685 2020/03/03  14:42:05    318302  4   1   25  0   0   0   0   1513,094    1516,156    1519,154    1521,969    1525,029    1527,813    1530,921    1533,869    1536,740    1539,943    1542,921    1545,879    1548,843    1551,849    1554,760    1557,943    1560,782    1563,931    1566,786    1569,751    1572,690    1575,535    1578,638    1581,755    1584,759    41  39  33  39  48  44  49  55  61  58  64  55  68  74  68  59  57  74  61  68  58  64  54  47  46  2   25  0   0   0   0   1512,963    1515,935    1518,857    1521,849    1524,655    1527,577    1530,332    1533,233    1536,204    1539,488    1542,571    1545,725    1549,200    1552,430    1555,332    1558,484    1561,201    1564,285    1567,001    1569,870    1572,758    1575,491    1578,512    1581,547    1584,405    48  43  37  42  57  54  59  62  67  58  71  59  77  82  82  64  71  88  77  79  72  73  63  49  50  3   25  0   0   0   0   1513,394    1516,517    1519,536    1522,082    1525,428    1527,963    1531,288    1534,102    1536,659    1539,757    1542,707    1545,627    1548,389    1551,459    1554,406    1557,986    1560,667    1564,103    1567,036    1570,144    1573,189    1575,888    1579,185    1582,323    1585,338    35  36  32  37  57  58  61  64  75  73  70  62  61  62  59  51  52  64  58  62  70  70  64  54  55  4   25  0   0   0   0   1512,658    1515,752    1518,797    1521,707    1524,744    1527,627    1530,871    1534,002    1537,086    1540,320    1543,217    1546,010    1548,660    1551,385    1554,253    1557,074    1560,193    1563,116    1566,043    1568,963    1571,855    1574,957    1577,954    1581,128    1584,273    43  42  39  40  56  50  56  62  65  54  59  62  75  79  73  63  67  77  73  75  68  62  54  51  51  100 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN'.encode())
       
        c.sendall('1685 2020/03/04  14:42:05    318303  4   1   25  0   0   0   0   1513,094    1516,156    1519,154    1521,969    1525,029    1527,813    1530,921    1533,869    1536,740    1539,943    1542,921    1545,879    1548,843    1551,849    1554,760    1557,943    1560,782    1563,931    1566,786    1569,751    1572,690    1575,535    1578,638    1581,755    1584,759    41  39  33  39  48  44  49  55  61  58  64  55  68  74  68  59  57  74  61  68  58  64  54  47  46  2   25  0   0   0   0   1512,963    1515,935    1518,857    1521,849    1524,655    1527,577    1530,332    1533,233    1536,204    1539,488    1542,571    1545,725    1549,200    1552,430    1555,332    1558,484    1561,201    1564,285    1567,001    1569,870    1572,758    1575,491    1578,512    1581,547    1584,405    48  43  37  42  57  54  59  62  67  58  71  59  77  82  82  64  71  88  77  79  72  73  63  49  50  3   25  0   0   0   0   1513,394    1516,517    1519,536    1522,082    1525,428    1527,963    1531,288    1534,102    1536,659    1539,757    1542,707    1545,627    1548,389    1551,459    1554,406    1557,986    1560,667    1564,103    1567,036    1570,144    1573,189    1575,888    1579,185    1582,323    1585,338    35  36  32  37  57  58  61  64  75  73  70  62  61  62  59  51  52  64  58  62  70  70  64  54  55  4   25  0   0   0   0   1512,658    1515,752    1518,797    1521,707    1524,744    1527,627    1530,871    1534,002    1537,086    1540,320    1543,217    1546,010    1548,660    1551,385    1554,253    1557,074    1560,193    1563,116    1566,043    1568,963    1571,855    1574,957    1577,954    1581,128    1584,273    43  42  39  40  56  50  56  62  65  54  59  62  75  79  73  63  67  77  73  75  68  62  54  51  51  100 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN'.encode())
      
        c.sendall('1685 2020/03/05  14:42:05    318411  4   1   25  0   0   0   0   1513,094    1516,156    1519,154    1521,969    1525,029    1527,813    1530,921    1533,869    1536,740    1539,943    1542,921    1545,879    1548,843    1551,849    1554,760    1557,943    1560,782    1563,931    1566,786    1569,751    1572,690    1575,535    1578,638    1581,755    1584,759    41  39  33  39  48  44  49  55  61  58  64  55  68  74  68  59  57  74  61  68  58  64  54  47  46  2   25  0   0   0   0   1512,963    1515,935    1518,857    1521,849    1524,655    1527,577    1530,332    1533,233    1536,204    1539,488    1542,571    1545,725    1549,200    1552,430    1555,332    1558,484    1561,201    1564,285    1567,001    1569,870    1572,758    1575,491    1578,512    1581,547    1584,405    48  43  37  42  57  54  59  62  67  58  71  59  77  82  82  64  71  88  77  79  72  73  63  49  50  3   25  0   0   0   0   1513,394    1516,517    1519,536    1522,082    1525,428    1527,963    1531,288    1534,102    1536,659    1539,757    1542,707    1545,627    1548,389    1551,459    1554,406    1557,986    1560,667    1564,103    1567,036    1570,144    1573,189    1575,888    1579,185    1582,323    1585,338    35  36  32  37  57  58  61  64  75  73  70  62  61  62  59  51  52  64  58  62  70  70  64  54  55  4   25  0   0   0   0   1512,658    1515,752    1518,797    1521,707    1524,744    1527,627    1530,871    1534,002    1537,086    1540,320    1543,217    1546,010    1548,660    1551,385    1554,253    1557,074    1560,193    1563,116    1566,043    1568,963    1571,855    1574,957    1577,954    1581,128    1584,273    43  42  39  40  56  50  56  62  65  54  59  62  75  79  73  63  67  77  73  75  68  62  54  51  51  100 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN'.encode())

   
       
        c.close()
    
    
if __name__ == '__main__':
    Main()

Но я вижу , мой второй поток не работает. Может кто-нибудь указать, где я ошибаюсь. Пожалуйста, помогите!

1 Ответ

0 голосов
/ 09 июля 2020

Tkinter является однопоточным, поэтому Thread практически не используется.

...