pythonの関数をcommon lispからソケット経由で呼ぶ

pythononlispの拡張では、cffiでpython.soを呼んでいます。しかしこの方法では良く分からないエラーが出て苦労することがあったので、pythonlispを別プロセスにしてソケット通信するようにしました。pythononlispの拡張と同様に行列の掛け算など様々なpythonの機能をcommon lispから使えます

http://www2s.biglobe.ne.jp/~niitsuma/jsonrpcdirect.html

使い方は

最初に適当なterminalで

$ python /usr/lib/python2.5/site-packages/jsonrpcdirect/jsonrpc_server.py

または

$ python /usr/local/lib/python2.6/dist-packages/jsonrpcdirect/jsonrpc_server.py

としてpythonのプロセスを起動した後で、違うterminalから以下のようにします.

$ sbcl
(require :asdf)
(require :asdf-install)
(asdf-install:install "http://www2s.biglobe.ne.jp/~niitsuma/cl-json-client01.tar.gz")
; usocketとcl-jsonを組み合わせただけのutilです

(asdf:operate 'asdf:load-op :cl-json-client) 

(jc::c "range" 2 7)  ; -> (2 3 4 5 6)
(jc::c "numpy.linalg.norm" (list 2 2))  ; -> 2.828427
(jc::c "numpy.reshape" (list 1 2 3 4 5 6 ) (list 2 3)) ; -> ((1 2 3) (4 5 6))   
(jc::c "numpy.dot" '((1 2) (3 4)) '((1 2) (3 4)) ) ; -> ((7 10) (15 22))  ;multipy matrix

Install

sudo apt-get install python-simplejson python-numpy sbcl clisp
wget http://www2s.biglobe.ne.jp/%7Eniitsuma/jsonrpcdirect06.tar.gz
tar zxf jsonrpcdirect06.tar.gz
cd jsonrpcdirect06
sudo python setup.py install

pythonのモジュールsimplejson numpyをinstallする必要がある。

port 31415を使って通信している。安全のためにこのポートは外部からアクセスできないように塞ぐ必要がある。