検索

Article
· Sep 12, 2024 3m read

PythonからIRISルーチンに引数を渡すサンプル

これは InterSystems FAQ サイトの記事です。
 

PythonからObjectScriptのルーチンを直接呼び出すことはできませんが、クラスメソッドを経由して間接的に呼び出すことができます。

しかし、Pythonの変数とObjectScriptのローカル変数は内部構造が異なるため、情報の交換には少し工夫が必要です。

簡単なサンプルでその方法について説明します。

まず、2つの変数を足し算する簡単なルーチン ^testを作ります。 

 

TEST    ;
    set sum = a + b

 

次にこの^testを呼び出すPythonのメソッドを含んだUser.testというクラスを作ります。

そしてpyという名前のPythonのメソッドを作成します。

先述の通りPythonからObjectScriptのルーチンを直接呼び出すことはできないので、ルーチンを間接的に呼び出すObjectScriptのメソッドを作成する必要があり、そのメソッドをPythonメソッドから呼び出すようにします。

渡したいデータが複数個ある場合、その数分引数を用意するのは面倒なため、Pythonの場合、情報をまとめて交換する際にdictionary(辞書)やlistという構造を使用することができます。

ここでは、dictionaryを使用する例を紹介します。

ClassMethod py() [ Language = python ]

{

   import iris

   rtn = "^test"
#  変数argのdictionary構造にa = 10, b = 20を設定
   arg = {"a":10, "b":20}

   ret = iris.cls('User.test').callrtn(rtn, arg)

# 戻り値のdictionary変数retにローカル変数sumの値が設定されている   
   print (ret.get("sum"))

}

 

次にルーチンを呼び出すためのクラスメソッドを定義します。

PythonのDictionary構造をObjectScriptで操作するためには、少し特別な処理が必要です。

ClassMethod callrtn(rtnname As %String, plist As %String) As %Integer [ ProcedureBlock = 0 ]

{
    // python dictから変数を取得
    set a = plist."get"("a")
    set b = plist."get"("b")
    
   // 2. ルーチンを実行する
   do @rtnname

   // 3. ローカル変数 ==> 戻り値 (python dict)
   kill rtnname,plist

   set ret = ##class(%SYS.Python).Builtins().dict()

   // 存在するローカル変数からdictionaryを生成する    set %="%"
   for {
       // ローカル変数を順番に取得
       set %=$Order(@%)

       quit:%=""        
       //変数retは除く
       continue:%="ret"
       do ret.setdefault(%, @%)

   }

   quit ret

}

 

2023.2以降のバージョンではarrayrefのサポートが追加されており、より直感的な処理が可能になりました。

 

ClassMethod py() [ Language = python ]
{
    import iris
    rtn = "^test"
    arg = {"a":10, "b":20}
    ar = iris.arrayref(arg)
    ret = iris.cls('Test.pytest').callrtn(rtn,ar)

    print (ret.get("sum"))
}

 

ClassMethod callrtn(rtnname As %String, plist As %String) As %Integer [ ProcedureBlock = 0 ]
{

    set a = plist("a")
    set b = plist("b")

    // ルーチン実行
    do @rtnname

    //ローカル変数 ==> 戻り値(python dict)
    kill rtnname, plist
    set ret = ##class(%SYS.Python).Builtins().dict()
    set % = "%"
    for {
        set %=$order(@%)
        quit:%=""
        continue:%="ret"
        do ret.setdefault(%, @%)
    }
    quit ret
}
Discussion (0)1
Log in or sign up to continue
Article
· Sep 12, 2024 1m read

CSPGatewayLatencyメッセージの対応について

これは InterSystems FAQ サイトの記事です。
 

messages.logまたはcconsole.log内に記録されるCSPGatewayLatencyのメッセージは、サーバが、パフォーマンス測定のため定期的に「CSPゲートウェイにリクエストを送信して応答をもらう」ことを行っており、応答を受け取るまで一定時間以上かかったときに出る警告(応答時間の閾値)です。

 

その既定値は1000ミリ秒です。

 

WebGateway(CSPGateway)が稼働する Web サーバの負荷が高い場合に出力する場合がありますが、実際のCSPアプリケーションやREST APIの動作や応答速度に影響が見られなければ、特に問題はありません。

 

またこのメッセージの出力頻度を下げるためにこの閾値を変更する方法もあります。

 

変更方法は以下を参照ください

 

ヘルスモニタのセンサー値をコマンドで変更する方法 

Discussion (0)1
Log in or sign up to continue
Article
· Sep 12, 2024 2m read

IIS上のWebGateway管理画面にアクセスすると404エラーが返ってくる場合の対処法

これは InterSystems FAQ サイトの記事です。
 

404エラーが返される場合に、以下の対応でエラーが解消されることがわかっています。


(1) binの接続を許可

 

/cspの構成エディタ>セクションで以下選択

  system.webServer > security > requestFiltering

  > hiddenSegmets 選択 > (コレクション)の右欄(Count=xx)の右端 [...] クリック

  > segment欄に binの行があったので、選択して削除

  > 画面戻って、右上の [適用] クリック  

 

または、IISの構成ファイルを直接編集することでも対応可能です。

 

C:\Windows\System32\inetsrv\config\applicationHost.config

 

そのファイルから以下のような記述部分を探し、<add segment="bin" />の行を削除し、保存します。

<requestFiltering>
<fileExtensions allowUnlisted="true" applyToWebDAV="true" />
<verbs allowUnlisted="true" applyToWebDAV="true" />
<hiddenSegments applyToWebDAV="true">
<add segment="web.config" />
<add segment="bin" />      <-- !!
</hiddenSegments>
</requestFiltering>

 

Default Web Site全体の設定を変えることが可能であれば、以下の記事の「操作方法」の箇所から

要求のフィルターより非表示のセグメント bin を削除してください。

Microsoftのドキュメント

(2) /cspのハンドラーマッピングで ISAPI-Dll が無効になっている

 

対処方法は以下の通りです。

 

/cspのハンドラーマッピング>ISAPI-Dll右クリック>機能のアクセス許可の編集>チェックボックスをすべて ON

 

(1)または(2)の対処後、IISを再起動してください。

Discussion (0)1
Log in or sign up to continue
Article
· Sep 12, 2024 1m read

 IRISで公開しているベンチマーク資料

これは InterSystems FAQ サイトの記事です。
 

 以下のようなベンチマーク関連の情報が公開されています。

 

Intel社と共同で実施したパフォーマンス(レイテンシー)とスケーラビリティ(スループット)を計測するベンチマーク結果

Intel社との共同ベンチマーク

 

ESG社によるIRISと他社データベースとの性能比較に関するレポート

ESGテクニカルレビュー


ウルシステムズ社が実施したAWS AuroraとIRISの性能評価結果

ウルシステムズ社が検証したベンチマーク結果レポート

 

オープンソースのベンチマークプログラム

公開しているベンチマークプログラム

 

WinterCorp社のベンチマークレポート

WInterCorpのベンチマークレポート

 

様々なハードウェア上で実施したベンチマーク結果を公表

SQLベンチマーク

 

開発生産性の評価に関連するレポート

Neuralytix社のアプリケーション開発生産性の定量的比較

Discussion (0)1
Log in or sign up to continue
Discussion (1)2
Log in or sign up to continue