在同一时间充当套接字服务器时,pyopengl显示被阻止

2024-09-30 10:34:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我实际上是在用一个pyopengl程序来充当socket服务器。同时 服务器接收来自客户端的命令并解释这些命令,同时进行相应的绘图。你知道吗

如果在执行socket操作时主线程被阻塞,我实际上启动了一个线程来执行socket server accept操作,并且在display循环中调用updateserver socket方法。你知道吗

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();
  1. 我不知道如何终止线程
  2. 一旦用另一个python文件编写的客户机开始推送数据,显示循环就会挂断,好像它已经死了一样

Tags: 命令self服务器nonedefstatussocket线程
1条回答
网友
1楼 · 发布于 2024-09-30 10:34:04

getClientContent中,行self.clientbuffer.readline();正在套接字上执行阻塞调用,这几乎可以肯定是造成问题的原因。你知道吗

您需要做的是让run方法处理readlines并将数据粘贴到队列中,然后图形显示线程从队列中读取数据。你知道吗

相关问题 更多 >

    热门问题