我的代碼接受來自多個源的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