トップ 差分 一覧 Farm ソース 検索 ヘルプ PDF 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)

と返ってくる