我的代码接受来自多个源的gps数据将其聚合并将其发送回连接到单个线程套接字的多个客户端。我得到它的工作,但输出线程似乎与cpu资源跑。Python socketserver将数据发送到多个客户端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
有什么办法来暂停线程,直到数据被发送?或者我可以模拟收到的消息触发主程序的数据突发?
辉煌,就像一个魅力。这是Google编程时遇到的问题,我不知道我不知道什么,所以我的搜索问题受到我已经了解的内容的限制。 – user2304910 2013-04-24 08:55:58
@ user2304910:这就是为什么它值得通过一个教程,而不是只抓取示例代码,并试图找出它。问题在于,对于你想要做的事情,经常没有任何好的教程。而且,如果有的话,他们很难找到。(我确信有人写了一篇很好的“Python中的线程之间安全地共享数据的不同方式介绍”,但我不知道在哪里找到它......) – abarnert 2013-04-24 17:55:08