ヾ(´・ω・`)ノ゙

2017年12月01日

pub/sub(´・ω・`)

びっとこいんのapiをいじってるとき、
あっちのスクリプトもこっちのスクリプトもpubnubやwebsocketで接続して、、、
とやってたら、同じチャンネルに接続して、同じデータを複数受信してるという状況になってたので、
スクリプト毎に接続するのではなくて、1つのsubscriberで受信し、
ローカルにpublisherを作って、それからデータを受信するようにするのがいいかも
2017_12_01_2032.png
と考えやってみました


こんな感じでpubnubで受信したものをzmqのpubでローカルホストの適当なポートに送出します
とりあえず send_json, recv_json を使ってデータをやり取りするようにしました
2017_12_01_2034.png

こんな感じで受信できました
2017_12_01_2036.png
2017_12_01_2035.png

pubnubで受信したときzmq_pubで送る前に配列にデータを入れて保持して、
req/repで溜まってるデータを取得できるようなのも書いてみました
pubnubだけだと過去の分が取れないので、売買プログラムやグラフ表示プログラムを起動した瞬間に
手軽にある程度過去の情報を使えるのはいいかもしれません

貯めてあるデータを読み込んで表示し、それ以降はsubで受信したデータで更新するのも書いてみました
こんな感じ
2017_12_01_2037.png


あと、簡単にではありますが
send, recv
send_string, recv_string
send_json, recv_json
send_pyobj, recv_pyobj
の送受信回数も調べてみました
データは {'data':int} こんな感じの辞書を送り続ける感じです
recvは1秒間取得した回数です
2017_12_01_2031.png

予想外にsend_pyobj, recv_pyobjが速かった
送受信の前後でpickle.dumps, pikle.loadsを使ってるみたいです
numpy配列なんかも送れた なるほど、いいっすね(´・ω・`)


bitflyerのデータって秒間何回くらいくるんだっけ?と思ってみて見たら
(BTC_JPY, FX_BTC_JPYのticker, executions, boardを受信)
2017_12_01_2033.png
こんな感じでしたので(状況によってだいぶ差はあると思いますが)
まぁsend_json, recv_jsonでも処理が追いつかないということにはならなそうです


試したスクリプトです
( ´・ω・`)つ https://ux.getuploader.com/hage_fx/download/44


ラインチャート等のスクリプトはbf_pub.pyを起動させた状態で起動すれば
動くようになってるはずです

※board_snapshotが5分に1回くらいしか送られてこなくて
pubnubだけだといつの間にか板がずれることがある気がしますが(いや、ある)
アップロードした板のやつは途中でgetboardする処理は入っていませんので
よろしくお願いします(´・ω・`)





posted by hage at 09:34| python | このブログの読者になる | 更新情報をチェックする