что не так с частью этого кода? - PullRequest
0 голосов
/ 12 января 2020

окно pygame зависает при каждом запуске этой программы. Я использую windows. Все остальное работает нормально, кроме случаев, когда всплывающее окно Pygame. Пожалуйста помоги! Я видел некоторые из постов, предлагающих использовать pygame.event.get(), но у меня это не работает!

class DriveDataHandler(socketserver.BaseRequestHandler):
class VideoStreamHandler(socketserver.StreamRequestHandler):   
class Server(object):
    def __init__(self, host, port1,port3):
        self.host = host
        self.port1 = port1
        #self.port2 = port2
        self.port3 = port3

        pygame.init()
        pygame.display.set_mode((250, 250))
    def video_stream(self, host, port):
        s = socketserver.TCPServer((host, port), VideoStreamHandler)
        s.serve_forever()
    def sensor_stream(self, host, port):
        s = socketserver.TCPServer((host, port), SensorDataHandler)
        s.serve_forever()
    def drive_stream(self, host, port):

        s = socketserver.TCPServer((host, port), DriveDataHandler)
        s.serve_forever()
    def start(self):

f __name__ == '__main__':
    h, p1, p3 = "127.0.1.1", 8000, 8004

    ts = Server(h, p1, p3)
    ts.start()

1 Ответ

1 голос
/ 12 января 2020

class Server(object):
    def __init__(self, host, port1,port3):
        self.host = host
        self.port1 = port1
        #self.port2 = port2
        self.port3 = port3


    def video_stream(self, host, port):

        s = socketserver.TCPServer((host, port), VideoStreamHandler)
        s.serve_forever()

    def sensor_stream(self, host, port):

        s = socketserver.TCPServer((host, port), SensorDataHandler)
        s.serve_forever()

    def drive_stream(self, host, port):

        s = socketserver.TCPServer((host, port), DriveDataHandler)
        s.serve_forever()

    def start(self):
        drive_thread = threading.Thread(target=self.drive_stream, args=(self.host, self.port3))
##        sensor_thread = threading.Thread(target=self.sensor_stream, args=(self.host, self.port2))
##        sensor_thread.daemon = True #this thread will be killed after the main program exits
##        sensor_thread.start()
        drive_thread.daemon = True
        drive_thread.start()

        video_thread = threading.Thread(target=self.video_stream, args=(self.host, self.port1))
        video_thread.daemon = True #this thread will be killed after the main program exits
        video_thread.start()

        pygame.init()
        pygame.display.set_mode((250, 250))
        finish = False
        while not finish:
            events = pygame.event.get()
            for e in events:
                if e.type == pygame.QUIT:
                    finish = True
        pygame.quit()

        #self.video_stream(self.host, self.port1)

Однако, как только вы завершите работу, что произойдет со всеми потоками, которые вы создали? Вам необходимо правильно завершить работу сервера.

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