pythonの関数をcommon lispからソケット経由で呼ぶ
pythononlispの拡張では、cffiでpython.soを呼んでいます。しかしこの方法では良く分からないエラーが出て苦労することがあったので、pythonとlispを別プロセスにしてソケット通信するようにしました。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を使って通信している。安全のためにこのポートは外部からアクセスできないように塞ぐ必要がある。