python - 这段代码的 pygame 部分有什么问题?
问题描述
每次我运行这个程序时,pygame 窗口都会冻结。我正在使用窗户。除了弹出 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()
解决方案
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)
然而,一旦你退出,你产生的所有线程会发生什么?您需要正确关闭服务器。
推荐阅读
- python-3.x - 从进程返回字符串 numpy 数组
- python - 使用 pymavlink 库接收和发送 mavlink 消息
- php - Zend3 表单过滤器 - ParamConverter 无法生成有效表单
- node.js - 了解 socket.io 向连接到套接字的特定用户广播消息
- openlayers - 是否可以在 OpenLayers 中为 ZoomToExtent 添加图标?默认为“E”
- python - 我们如何使用 open cv 在 python 中检测给定形状和颜色的对象?我不能同时做这两件事
- php - 用于查询构建器的 Sql - Symfony
- c# - 在 Entity Framework Core 中实例化 GUID 是不好的做法吗?
- ibm-cloud - 有没有办法在一次 api 调用中获得整合的 IBM Cloud 计费
- python - 在 Jupyter Windows 上使用 pool 并行读取多个文件需要很长时间: