にむかひて

erlport, `:python.call`が遅い

2021年11月 トップ > ひとこと > 調査したことの記録
#Elixir #Erlport

大きなデータを渡すとけっこうな時間がかかっていることがわかった

結論

  • 一度JSONにして渡すと早かった。たぶん型変換に時間がかかっているので、一思いにそれぞれの側のライブラリに任せるとよい様子
Jason.encode!(data)
import json
json.loads(data_json)

おまけ

  • 呼び出しが多くなると毎回 :python.start/:python.stop して時間がかかるため、Agentなりにしてプロセスを取っておく
  • python側でNoneとしたいときは、python側で変換するしかなさそう
    • json.loads(json_data) が null を None にしてくれるので、elixir側では “None” のような文字列にしておいて(取り決め)、python側で null に置換する作戦が考えられる
    • json_data = json_data.decode().replace('\"None\"', 'null')
    • decode() はelixir側”文字列”を渡すとpython側でbyte型になるので必要

サイト内検索