私は実際にpyopenglプログラムを使用してソケットサーバーとして機能しています。同時に、サーバーはクライアントからコマンドを受け取り、これらのコマンドを解釈し、同時に対応する描画を行います。
ソケット処理中にメインスレッドがブロックされた場合、実際にソケットサーバー受け入れ処理を実行するスレッドを開始し、updateserverソケットメソッドが表示ループで呼び出されます。
class SocketServer(Thread):
def __init__ (self ):
Thread.__init__(self)
self.serversocket = socket(AF_INET, SOCK_STREAM);
self.serversocket.bind(("127.0.0.1", 7780));
self.status = -1;#not connected
self.clientsocket = None;
self.clientaddress = None;
self.clientbuffer = None;
self.serversocket.listen(5);
def run(self):
print 'thread running'
while( self.status == -1 ):
time.sleep(10);
(self.clientsocket, self.clientaddress) = self.serversocket.accept();
self.clientbuffer = self.clientsocket.makefile('r',0);
self.status = 0;
#Thread.kill();
#print 'SERVER LISTENNING FINISHED';
def getClientContent(self):
if ( not self.clientbuffer ): return "NONE CLIENT BUFFER";
return self.clientbuffer.readline();
ss = SocketServer();
def updateServerSocket():
global ss;
print ss.getClientContent();
- スレッドを終了する方法がわかりません
- 別のPythonファイルに書き込まれたクライアントがデータをプッシュし始めると、表示ループはまるで死んでいるかのようにハングアップしました