Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当同时充当套接字服务器时,pyopengl显示被阻止_Python_Multithreading_Opengl_Pyopengl - Fatal编程技术网

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

Python 当同时充当套接字服务器时,pyopengl显示被阻止,python,multithreading,opengl,pyopengl,Python,Multithreading,Opengl,Pyopengl,我实际上使用了一个pyopengl程序作为套接字服务器。同时 服务器从客户端接收命令并解释这些命令,同时进行相应的绘图 如果主线程在执行套接字操作时被阻塞,我实际上启动了一个线程来执行套接字服务器接受操作,并且在display循环中调用updateserver socket方法 class SocketServer(Thread): def __init__ (self ): Thread.__init__(self) self.serversocket = socket(AF_

我实际上使用了一个pyopengl程序作为套接字服务器。同时 服务器从客户端接收命令并解释这些命令,同时进行相应的绘图

如果主线程在执行套接字操作时被阻塞,我实际上启动了一个线程来执行套接字服务器接受操作,并且在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();
我不知道如何终止线程 一旦在另一个python文件中编写的客户机开始推送数据,显示循环就会像死了一样挂断 在getClientContent中,行self.clientbuffer.readline;正在对套接字执行阻塞调用,这几乎肯定是导致您出现问题的原因

相反,您需要做的是让run方法执行readline并将数据粘贴到队列中,然后图形显示线程从队列中读取数据