質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.99%

pythonでsendを使ってデータ送信を行う際のエラーについて

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,729

YuEndo

score 6

○目標

2台のPC間でデータの送受信を行うプログラム(python)の実装

送信速度:10回/1秒程度

開発環境:Windows8, python2.7

○現状

公式で用意されているpython用SDK(https://github.com/milk-cocoa/python_sdk)を利用し,データの送受信を試みています.データの送信にはsend関数を使用し,on関数で受け取って表示するようにしています.

送信側プログラム

from milkcocoa import milkcocoa as mlkcca
import time

mlk_cnt = mlkcca.Milkcocoa.connect('*******', useSSL=False, blocking=False)

datastore = mlk_cnt.datastore('python')

c = 0
while(True):
    datastore.send({'count':str(c)})
    time.sleep(0.1)
    c += 1

受信側プログラム

from milkcocoa import milkcocoa as mlkcca
import time

mlk_cnt = mlkcca.Milkcocoa.connect('*******', useSSL=False, blocking=False)
datastore = mlk_cnt.datastore('python')

def on_push(e):
    print e

datastore.on("send", on_push)


while(True):
    time.sleep(1)

現状では1秒に約10回データを送り,同時に受信することができています.しかし,ある程度データを送り続けると送信側のプログラムで以下の様なエラーが表示され,送信が止まってしまいます.

C:\******\src>python test.py
Connected with result code 0
Exception in thread Thread-1:
Traceback (most recent call last):
  File "C:\python27\lib\threading.py", line 810, in __bootstrap_inner
    self.run()
  File "C:\python27\lib\threading.py", line 763, in run
    self.__target(*self.__args, **self.__kwargs)
  File "C:\******\******\python_sdk-master\python_sdk-master\src\paho\mqtt\
client.py", line 2286, in _thread_main
    self.loop_forever()
  File "C:\******\******\python_sdk-master\python_sdk-master\src\paho\mqtt\
client.py", line 1261, in loop_forever
    rc = self.loop(timeout, max_packets)
  File "C:\******\******\python_sdk-master\python_sdk-master\src\paho\mqtt\
client.py", line 811, in loop
    rc = self.loop_read(max_packets)
  File "C:\******\******\python_sdk-master\python_sdk-master\src\paho\mqtt\
client.py", line 1073, in loop_read
    rc = self._packet_read()
  File "C:\******\******\python_sdk-master\python_sdk-master\src\paho\mqtt\
client.py", line 1474, in _packet_read
    rc = self._packet_handle()
  File "C:\******\******\python_sdk-master\python_sdk-master\src\paho\mqtt\
client.py", line 1942, in _packet_handle
    return self._handle_publish()
  File "C:\******\******\python_sdk-master\python_sdk-master\src\paho\mqtt\
client.py", line 2117, in _handle_publish
    self._handle_on_message(message)
  File "C:\******\******\python_sdk-master\python_sdk-master\src\paho\mqtt\
client.py", line 2273, in _handle_on_message
    self.on_message(self, self._userdata, message)
  File "C:\******\******\python_sdk-master\python_sdk-master\src\milkcocoa\
milkcocoa.py", line 38, in on_message
    self.datastores["/".join(topic_arr)].fire(event, str(msg.payload))
KeyError: '$sys'

送信側のプログラムの送信頻度を早くするほど,すぐにこのエラーが出て止まってしまいます.送信回数をカウントした結果,1秒10回程度の送信速度の場合7000回程度,sleepを行わず最も速く送信した場合78000回程度の送信回数でエラーが出力されます.

リアルタイムで長時間,データの送受信を行いたいので,このエラーの原因を教えていただきたいです. milkcocoaを触り始めたばかりであまり詳しくわかっていないということもあり,send関数を使ったデータの送信の速度や回数についてなにか制限があるようでしたら,上限なども教えていただきたいです. よろしくお願いいたします.

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.99%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる