トップ 一覧 Farm 検索 ヘルプ RSS ログイン

Diary/2020-1-24の変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!RECONF(3)

!LabRAD使ってみる(1)
https://github.com/labrad/pylabrad/wiki を参考にするといいらしい

まずはScalabrad https://github.com/labrad/scalabrad を 用意
バイナリが https://github.com/labrad/scalabrad/releases/tag/v0.8.3 で公開されている
 wget -O scalabrad-0.8.3.tar.gz \
  https://github.com/labrad/scalabrad/releases/download/v0.8.3/scalabrad-0.8.3.tar.gz
 tar xvf scalabrad-0.8.3.tar.gz
 ./scalabrad-0.8.3/bin/labrad
これでscalabradが起動する.

別のターミナルでPylabradを動かす.
まずは準備.
 pipenv --python 2.7
 pipenv shell
 pipenv install twisted
 pipenv install pylabrad
pythonインタプリタを起動して,
 import labrad
 cxn = labrad.connect('localhost') # ユーザ名とか聞かれるのでエンター
これでクライアントが起動した.
 cxn
とすると
 auth
 manager
 registry
というサーバーが起動していることが確認できる.
 cxn['manager']; cxn.manager
でmanagerに接続.たとえば,インスタンスの詳細を表示できる.
 cxn.manager['data_to_string']; cxn.manager.data_to_string
でサーバのdata_to_stringが呼べるようになる.たとえば,
 cxn.manager.data_to_string([(1, 'This'), (2, 'is'), (3, 'a'), (4, 'test.')])
とかするとメソッドを呼び出せる.

!LabRAD使ってみる(2)
クライアントは https://github.com/labrad/pylabrad/wiki/Writing-clients に
サーバは https://github.com/labrad/pylabrad/wiki/Writing-Servers に詳細な説明がある.

が,まずは,サンプルとして
https://raw.githubusercontent.com/wiki/labrad/pylabrad/squaringserver.py を試してみる.

 import time
 
 from labrad.server import LabradServer, setting
 
 class SquaringServer(LabradServer):
     name = "Squaring Server"
 
     @setting(10, data='v[]', returns='v[]')
     def square(self, c, data):
         time.sleep(2)
         return data**2
 
 __server__ = SquaringServer()
 
 if __name__ == '__main__':
     from labrad import util
     util.runServer(__server__)

このスクリプトを,pylabradをセットアップ(pip install)したpipenv環境で実行.
 python squaringserver.py
 2020-01-24 20:07:32+0900 [-] Log opened.
みたいな表示が出力されるので,一旦エンターキーを入力すると,
 Enter LabRAD password (localhost:7682):
とパスワードの入力を求められるので,空のままエンター
 2020-01-24 20:07:52+0900 [LabradProtocol,client] Squaring Server starting...
 2020-01-24 20:07:52+0900 [LabradProtocol,client] Squaring Server now serving
とか出てサーバーが起動する.


別のターミナルでサーバにアクセスする.
 pipenv shell
 python
として,pylabradをセットアップした環境に入ってpythonインタプリタを起動.
 import labrad
 cnx = labrad.connect('localhost')
 # 'localhost'不要という話もあるけどうちの環境では必要だった
これで,
 Enter username, or blank for the global user (localhost:7682):
 Enter LabRAD password (localhost:7682):
と,ユーザ名とパスワード求められるので空のままエンター.
これで,squaringserverが待ち受けているLabRADネットワークに接続できる.
 cnx
と入力すると,
 Available servers:
     auth
     manager
     registry
     squaring_server
と,squaring_serverの存在が確認できる.
 s = cnx.squaring_server
と,squaring_serverのインスタンスへのハンドラを変数に保存して,
 s.square(2)
などと入力してsquaring_serverのメソッドが呼べる.
しばらく待つと,
 4.0
と結果(二乗した値)がかえってくる.

!LabRAD使ってみる(3)
Python 3.8でも,同様にして動作することを確認.

!LabRAD使ってみる(4)
リストをやりとりしたければ,

 import time
 
 from labrad.server import LabradServer, setting
 
 class SquaringServer(LabradServer):
     name = "Squaring Server"
 
     @setting(10, "square")
     def square(self, c, data):
         time.sleep(2)
         return [data[0]**2, data[1]**2]
 
 __server__ = SquaringServer()
 
 if __name__ == '__main__':
     from labrad import util
     util.runServer(__server__)

とか用意しておいて,クライアントとなる側でインタプリタ起動して,
 import labrad
 cnx = labrad.connect('localhost'); cnx
 s = cnx.squaring_server
 s.square([2,3])
とすると,
 array([4, 9], dtype=int32)
と返ってくる