我的代码接受来自多个来源的 gps 数据,将其聚合并将其发送回连接到线程单套接字的多个客户端。我让它工作了,但输出线程似乎耗尽了 cpu 资源。
如果我添加代码来等待来自客户端的一些数据,那么 CPU 使用就会消失,但客户端只接受 gps 信息流,它们不会发送任何内容。
下面是发送数据正常但运行高 CPU 的服务器代码
class ThreadedServerRequestHandler(SocketServer.StreamRequestHandler):
def handle(self):
global SendData
global SendNow
while True:
SendNow
for line in SendData:
self.request.sendall(line)
SendData = []
SendNow = False
return
class ServerThread(SocketServer.ThreadingMixIn, SocketServer.TCPServer):
daemon_threads = True
allow_reuse_address = True
if __name__ == '__main__':
import socket
import threading
address = TxServer
server = ServerThread(address, ThreadedServerRequestHandler)
t = threading.Thread(target=server.serve_forever)
t.setDaemon(True) # don't hang on exit
t.start()
如果我将其更改为低于 cpu 停止但它仅在我发送击键时输出数据。
class ThreadedServerRequestHandler(SocketServer.StreamRequestHandler):
def handle(self):
global SendData
global SendNow
while True:
self.data = self.request.recv(1024).strip()
if self.data == '':
print 'closing thread'
break
while SendNow == True:
for line in SendData:
self.request.sendall(line)
SendData = []
SendNow = False
return
有什么方法可以暂停线程直到发送数据?或者我可以模拟接收到的消息来触发主程序的数据突发吗?