2016-07-02 5 views
2

私は、Wifiを搭載したRaspberry PI 2の異なるポートで、TCPとUDPを使用してかなり簡単なメッセージサーバーを設定しています。マルチキャストにUDPを使用しています。サーバーは正常に動作します。問題は、サーバーを実行するときにプロセッサーが約30%のプロセッサー使用率にジャンプすることです(TCPおよびUDPリスナー)。これは何も処理しておらず、ただ聞いているだけです。 UDPをシャットダウンすると、約3〜5%になります。これは正常ですか(それはRPiです)、何か間違っていますか?Python udpの性能

class UDPServer(asyncore.dispatcher): 
    def __init__(self): 
    asyncore.dispatcher.__init__(self) 
    multicast_group = '224.3.29.71' 
    server_address = ('', 8081) 

    # Create the socket 
    self.create_socket(socket.AF_INET, socket.SOCK_DGRAM) 

    # Bind to the server address 
    self.bind(server_address) 


    group = socket.inet_aton(multicast_group) 
    mreq = struct.pack('4sL', group, socket.INADDR_ANY) 
    self.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq) 
    print("UDP listening on {}:{}".format(multicast_group,8081)) 
+0

'server_address =( ''、8081)'それは悪い考えです!あなたはWiFi上で働いていますが、すべてのインターフェイスで動作しますが、すべてのネットワークに遅延がありますが、すばやくスキャンするのはなぜですか? – dsgdfg

+0

無関係:ドキュメントでは、 'asyncore'ではなく' asyncio'を使うべきだと言います。 – jfs

+0

私は特定のアドレスを使用するバージョンを持っていますが、実際にはクラウドサーバーのセットでこれを使用するつもりであり、怠け者です:)。私は実際にこれを使用するときにそれを修正しますが、チェックしてもパフォーマンスには影響しません。スキャン速度までは、asynccoreのループ関数を使用しています - それはあなたが参照しているものですか?私はasyncioをチェックアウトします。 –

答えて

1

は、それが戻ってこれを取得するために私にしばらく時間がかかったが、J.F.セバスチャンは解決策を持っている:ここではUDPリスナーを初期化するためのコードです。私はasyncioを実装しており、オーバーヘッドはほとんどありません。 Python documentationのデモをそのままコピーしました。 asyncioの唯一の問題は、暫定的にリストされているように見えるので、技術的に後で削除することができるということです。あなたが答えのクレジットを望むなら、答えにあなたのコメントを移して、私はそれをマークします。 Thanks J. F. Sebastionとdsgdfg。

関連する問題