私のコードは、複数のソースから 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
データが送信されるまでスレッドを一時停止する方法はありますか? または、受信したメッセージをシミュレートして、メイン プログラムからデータ バーストをトリガーできますか?