我正在使用kivy(输出到7“显示器)在Raspberry Pi上编写一个遥控蛇游戏。 套接字应该在游戏运行时收听端口。 然而事实证明,游戏循环和socketIO的等待循环不能一起运行。我尝试过多线程但它没有按预期工作。
socketIO代码:
df.columns = [column + 'col' for column in df.columns]
主要代码肯定不起作用:
from socketIO_client import SocketIO, BaseNamespace
class Namespace(BaseNamespace):
def on_connect(self):
print('[Connected]')
def on_message(self,packet):
print packet
self.get_data(packet)
def get_data(self, packet):
if(type(packet) is str):
matches = re.findall(PATTERN, packet)
if(matches[0][0]=='2'):
dataMatches = re.findall(DATAPATTERN, matches[0][4])
print dataMatches
......
我尝试了以下多线程,但它不起作用:
if __name__ == '__main__':
MyKeyboardListener() #keyboard listener, works fine
SnakeApp().run()
socketIO = SocketIO('10.0.0.4',8080,Namespace)
socketIO.wait()
上面的代码导致程序中止并显示错误消息:“致命Python错误:( pygame降落伞)分段错误 中止“
我还尝试了另一种多线程方法,但它也没有用。这真令人沮丧。有没有办法让游戏循环和socketIO的等待循环同时运行?或者我只是错过了什么?
更新:main的工作代码:
if __name__ == '__main__':
MyKeyboardListener() #keyboard listener, works fine
threading.Thread(target = SnakeApp().run).start() #results in abort
socketIO = SocketIO('10.0.0.4',8080,Namespace)
socketIO.wait()
答案 0 :(得分:0)
您应该在主线程中运行kivy主循环,并在辅助线程中运行套接字列表(与您的第二次尝试相反,但不起作用)。
但是当你只是关闭它时它会让你的应用程序挂起,因为尽管主线程已经死了,但是辅助线程会保持它活着。
解决此问题的最简单方法是使用daemon = True
标志启动辅助线程,因此一旦主线程死亡,它就会被终止。