すべてのプロダクト
Search
ドキュメントセンター

Platform For AI:Python SDK

最終更新日:May 31, 2026

このトピックでは、公式 Python SDK の詳細な API リファレンスと、一般的な入力形式と出力形式に対応する完全なコード例を掲載します。

説明

SDK のユースケースと動作原理は、「サービスコール用 SDK」をご参照ください。

前提条件

pip install -U eas-prediction --user

クイックスタート

モデルの入力データフォーマットに一致する Request クラスを選択します。次のコードは、StringRequest を使用するエンドツーエンドのサービスコールにおける最小限の例です。この例では、JSON 構造のデータを文字列として送信しています。その他の例については、Examples をご参照ください。

#!/usr/bin/env python
from eas_prediction import PredictClient
from eas_prediction import StringRequest

if __name__ == '__main__':
    client = PredictClient('http://182848887922****.cn-shanghai.pai-eas.aliyuncs.com', 'my_service')
    client.set_token('YOUR_SERVICE_TOKEN')
    client.init()

    request = StringRequest('[{}]')
    resp = client.predict(request)
    print(resp)

API リファレンス

Python SDK は、目的別にグループ化された以下のクラスを提供します。

グループ

説明

メインクライアント

PredictClient:エンドポイント、サービス名、トークンなどのサービス情報を設定し、リクエストを送信して、レスポンスを受信します。

入力と出力

  • StringRequest / StringResponse:カスタムプロセッサや PMML モデルなど、文字列ベースのシナリオの入力と出力をカプセル化します。

  • TFRequest / TFResponse:TensorFlow モデルのリクエストとレスポンスをカプセル化します。

  • TorchRequest / TorchResponse:PyTorch モデルのリクエストとレスポンスをカプセル化します。

  • BladeRequest など。サポートされているタイプの完全なリストについては、SDK を参照してください。

キューサービス

  • QueueClient:データの送信、データプッシュのサブスクライブ、キューのステータス照会を行うための非同期キュークライアントです。

  • WatcherQueueClient.watch() で作成する、プッシュされたデータを受信するためのキューサブスクライバーです。

共通パラメーター

エンドポイント:サーバーのエンドポイントアドレスです。

  • 標準サービスの場合、このパラメーターをデフォルトのゲートウェイエンドポイントに設定します。例:182848887922***.cn-shanghai.pai-eas.aliyuncs.com

  • VPC ダイレクト接続リクエストの場合、このパラメーターをサービスの VPC ダイレクト接続エンドポイントに設定します。フォーマットは <uid>.vpc.<region-id>.pai-eas.aliyuncs.com です。例:182848887922****.vpc.cn-shanghai.pai-eas.aliyuncs.com

PredictClient クラス

メソッド

説明

PredictClient(endpoint, service_name, custom_url)

  • PredictClient オブジェクトを作成します。

  • パラメーター:

    • エンドポイント:サーバーのエンドポイントアドレス。詳細については、「共通パラメーター」をご参照ください。

    • service_name:サービスの名前。

    • custom_url:サービスの URL。このパラメーターはオプションです。Web UI サービスなど、標準的ではないエンドポイントフォーマット (<uid>.<region>.pai-eas.aliyuncs.com のフォーマットではない) のサービスにのみ使用します。例:client = PredictClient(custom_url='<url>')

set_endpoint(endpoint)

  • 説明:サーバーのエンドポイントアドレスを設定します。詳細については、「共通パラメーター」をご参照ください。

  • endpoint パラメーターは、サーバー側のエンドポイントを指定します。

set_service_name(service_name)

  • 説明:リクエストするサービスの名前を設定します。

  • パラメーター:service_name。リクエスト対象のサービス名。

set_endpoint_type(endpoint_type)

  • 説明:サーバーのゲートウェイタイプを設定します。

  • パラメーター:endpoint_type。設定するゲートウェイのタイプです。以下のゲートウェイタイプがサポートされています。

    • ENDPOINT_TYPE_GATEWAY:デフォルトのゲートウェイ。

    • ENDPOINT_TYPE_DIRECT:ダイレクト接続リクエストを示します。このパラメーターを設定しない場合、クライアントはデフォルトでゲートウェイを介してサービスにアクセスします。

set_token(token)

  • 説明:サービスのアクセストークンを設定します。

  • token パラメーターは、サービスのアクセストークンを指定します。

set_retry_count(max_retry_count)

  • 説明:リクエストが失敗した後の再試行回数を設定します。

  • max_retry_count パラメーターは、失敗したリクエストの再試行回数を指定します。デフォルト値は 5 です。

    重要

    クライアントは、サーバー側のプロセス例外、サーバーの異常、またはゲートウェイへの永続的な接続が失われた場合など、断続的な問題が原因で失敗したリクエストを再送信する必要があります。したがって、このパラメーターを 0 に設定しないでください。

set_max_connection_count(max_connection_count)

  • 説明:クライアントの接続プール内の永続的な接続の最大数を設定します。パフォーマンス向上のため、クライアントはサーバーとの永続的な接続を確立し、接続プールに配置します。リクエストごとに、クライアントは接続プールからアイドル状態の接続を取得してサービスにアクセスします。

  • max_connection_count パラメーターは、接続プール内の永続的な接続の最大数を指定します。デフォルト値は 100 です。

set_timeout(timeout)

  • 説明:リクエストタイムアウト期間を設定します。

  • パラメーター:timeout。リクエストのタイムアウト期間をミリ秒単位で指定します。デフォルト値は 5000 です。

init()

PredictClient オブジェクトを初期化します。パラメーターを設定した後、設定を有効にするには init() メソッドを呼び出す必要があります。

predict(request)

  • 説明:オンライン予測サービスに予測リクエストを送信します。

  • request パラメーターは抽象クラスです。StringRequest や TFRequest など、さまざまなタイプの request を渡すことができます。

  • 戻り値:リクエストに対応する Response オブジェクト。

StringRequest クラス

メソッド

説明

StringRequest(request_data)

  • StringRequest オブジェクトを作成します。

  • パラメーター:request_data。送信するリクエスト文字列を指定します。

StringResponse クラス

メソッド

説明

to_string()

  • 説明:StringResponse オブジェクトを文字列に変換します。

  • 戻り値:レスポンスボディ。

TFRequest クラス

メソッド

説明

TFRequest(signature_name)

  • TFRequest オブジェクトを作成します。

  • パラメーター:signature_name。リクエスト対象モデルの署名名を指定します。

add_feed(self, input_name, shape, data_type, content)

  • 説明:TensorFlow モデルに必要な input データを設定します。

  • パラメーター:

    • input_name:入力テンソルのエイリアス。

    • shape:入力テンソルのシェイプ。

    • data_type:入力テンソルのデータ型。以下のデータ型をサポートしています。

      • TFRequest.DT_FLOAT

      • TFRequest.DT_DOUBLE

      • TFRequest.DT_INT8

      • TFRequest.DT_INT16

      • TFRequest.DT_INT32

      • TFRequest.DT_INT64

      • TFRequest.DT_STRING

      • TFRequest.TF_BOOL

    • content:フラット化された 1 次元配列で表される入力テンソルのコンテンツ。

add_fetch(self, output_name)

  • 説明:TensorFlow オンライン予測サービスモデルをリクエストするときに出力するテンソルのエイリアスを設定します。

  • output_name パラメーターは、出力テンソルのエイリアスを指定します。

    このパラメーターは、SavedModel モデルではオプションです。このパラメーターが設定されていない場合、すべての outputs が返されます。

    このパラメーターは、フリーズされたモデルでは必須です。

to_string()

  • 説明:TFRequest ProtoBuf オブジェクトを文字列にシリアル化します。

  • 戻り値:TFRequest オブジェクトをシリアル化した文字列。

TFResponse クラス

メソッド

説明

get_tensor_shape(output_name)

  • 説明:指定されたエイリアスを持つ出力テンソルのシェイプを取得します。

  • output_name パラメーターは、シェイプを取得したいテンソルのエイリアスを指定します。

  • 戻り値:出力テンソルのシェイプ。

get_values(output_name)

  • 説明:出力テンソルのデータベクトルを取得します。

  • output_name パラメーターは、出力テンソルのエイリアスです。

  • 戻り値:このメソッドは、出力を 1 次元配列として返します。get_tensor_shape() を使用してテンソルのシェイプを取得し、配列を再形成します。このメソッドは、output のタイプに基づいて、さまざまなタイプの結果配列を返します。

TorchRequest クラス

メソッド

説明

TorchRequest()

TorchRequest オブジェクトを作成します。

add_feed(self, index, shape, data_type, content)

  • 説明:PyTorch モデルに必要な入力テンソルを設定します。

  • パラメーター:

    • index:入力テンソルのインデックス。

    • shape:入力テンソルのシェイプ。

    • data_type:入力テンソルのデータ型。以下のデータ型をサポートしています。

      • TFRequest.DT_FLOAT

      • TFRequest.DT_DOUBLE

      • TFRequest.DT_INT8

      • TFRequest.DT_INT16

      • TFRequest.DT_INT32

      • TFRequest.DT_INT64

      • TFRequest.DT_STRING

      • TFRequest.TF_BOOL

    • content:フラット化された 1 次元配列で表される入力テンソルのコンテンツ。

add_fetch(self, output_index)

  • 説明:PyTorch オンライン予測サービスモデルをリクエストするときに出力するテンソルのインデックスを設定します。このメソッドはオプションです。このメソッドを呼び出して出力テンソルのインデックスを設定しない場合、すべての outputs が返されます。

  • パラメーター:output_index。出力テンソルのインデックスを指定します。

to_string()

  • 説明:TorchRequest ProtoBuf オブジェクトを文字列にシリアル化します。

  • 戻り値:TorchRequest オブジェクトをシリアル化した文字列。

TorchResponse クラス

メソッド

説明

get_tensor_shape(output_index)

  • 説明:指定されたインデックスを持つ出力テンソルのシェイプを取得します。

  • パラメーター:output_index。シェイプを取得したい出力テンソルのインデックスです。

  • 戻り値:指定されたインデックスに対応する出力テンソルのシェイプ。

get_values(output_index)

  • 説明:出力テンソルのデータベクトルを取得します。このメソッドは、出力を 1 次元配列として返します。get_tensor_shape() メソッドを使用して、対応するテンソルのシェイプを取得し、必要な多次元テンソルに再形成できます。このメソッドは、output のタイプに基づいて、さまざまなタイプの結果配列を返します。

  • パラメーター:output_index。取得する出力テンソルのインデックスを指定します。

  • 戻り値:結果テンソルのデータ配列。

QueueClient クラス

メソッド

説明

QueueClient(endpoint, queue_name)

  • QueueClient オブジェクトを作成します。

  • パラメーター:

    • エンドポイント:サーバーのエンドポイントアドレス。

    • queue_name:キューサービスの名前。

set_token(token)

  • 説明:キューサービスの認証トークンを設定します。

  • パラメーター:token。キューサービスのトークンです。

init(uid=None,gid='eas')

  • 説明:QueueClient オブジェクトを初期化します。

  • パラメーター:

    • uid:サーバーに登録されているクライアントのユーザー ID。各クライアントインスタンスの uid は一意である必要があります。uid は一度しか登録できません。サーバーは、異なる uid に対してプッシュされたデータを均等に分散します。

    • gid:サーバーに登録されているクライアントのグループ ID。デフォルトでは、すべてのクライアントは同じグループに属します。異なるグループが存在する場合、同じデータのコピーがすべてのグループにプッシュされます。

set_logger(logger=None)

  • 説明:QueueClient のロガーオブジェクトを設定します。デフォルトでは、ランタイムの警告メッセージが標準出力に出力されます。この情報を無効にするには、ロガーオブジェクトを None に設定します。

  • パラメーター:logger。設定するロギングオブジェクトを指定します。

truncate(index)

  • 説明:指定されたインデックスより前のデータをキューから切り捨てます。

  • パラメーター:index。キューを切り捨てるデータのインデックスを指定します。

put(data,tags:dict={})

  • 説明:キューにデータを書き込みます。

  • パラメーター:

    • data:キューに書き込むデータのコンテンツ。

    • tags (オプション):キューに書き込むデータのタグ。

  • 戻り値:

    • index:キューに書き込まれたデータのインデックス値。この値を使用して、キューからデータをクエリできます。

    • requestId:キューに書き込まれたデータの自動生成されたリクエスト ID。リクエスト ID は、キュー内のデータをクエリするためにも使用できる特別なタグです。

get(request_id=None, index=0, length=1, timeout='5s', auto_delete=True, tags={})

  • 説明:指定された条件に基づいてキューからデータをクエリします。

  • パラメーター:

    • request_id:クエリするデータのリクエスト ID。このパラメーターが指定されている場合、クエリは index から最大 length 件のレコードをスキャンします。指定されたリクエスト ID のデータが見つかった場合は、それが返されます。それ以外の場合は、空の結果が返されます。

    • index:クエリするデータの開始インデックス。デフォルト値は 0 で、キューの最初のデータからクエリが開始されることを示します。

    • length:クエリするデータの数。index を含めて、最大 length 件のデータが返されます。

    • timeout:クエリの待機時間。待機時間内にキュー内のデータ数が length に達した場合、データはすぐに返されます。それ以外の場合、クエリは timeout に達すると停止します。

    • auto_delete:クエリされたデータをキューから自動的に削除するかどうかを指定します。このパラメーターを False に設定すると、データを繰り返しクエリできます。delete() メソッドを呼び出して、データを手動で削除できます。

    • tags:フィルタリングに使用されるタグの dict。クエリは、指定された index から始まる length 件のデータをスキャンし、指定されたタグを含むデータを返します。

  • 戻り値:キューからクエリされたデータ (DataFrame)。

attributes()

  • 説明:キューの全長や現在のデータ長など、キューの属性を取得します。

  • 戻り値:attrs:キューの属性。データ型は dict です。

delete(indexes)

  • 説明:指定されたインデックスのデータをキューから削除します。

  • パラメーター:indexes。キューから削除するデータのインデックスです。このパラメーターは、String 型の単一のインデックス、または List 型のインデックスのリストをサポートします。

search(index)

  • 説明:データのキューイング情報をクエリします。

  • パラメーター:index。クエリするデータのインデックスです。

  • 戻り値:JSONObject 型のデータキューイング情報。次のフィールドが含まれます。

    • ConsumerId:データを処理しているインスタンスの ID。

    • IsPending:データが処理中かどうかを示します。

      • True は、データが処理中であることを示します。

      • False は、データがキュー内にあることを示します。

    • WaitCount:現在のデータより前にキューで待機しているデータ数。このフィールドは、IsPendingFalse の場合にのみ有効です。IsPendingTrue の場合、値は 0 です。

    返されるコンテンツの例:

    • レスポンス {'ConsumerId': 'eas.****', 'IsPending': False, 'WaitCount':2} は、リクエストがキューに入れられていることを示します。

    • ログに search error:Code 404, Message: b'no data in stream' と表示され、{} が返される場合、データがキューに見つからなかったことを示します。これは、データがサーバーによって正常に処理され、結果が返されたか、または index パラメーターが正しく設定されていないために発生する可能性があります。ご確認ください。

watch(index, window, index_only=False, auto_commit=False)

  • 説明:キュー内のデータをサブスクライブします。キューサービスは、指定された条件に基づいてクライアントにデータをプッシュします。

  • パラメーター:

    • index:データサブスクリプションの開始インデックス。

    • window:サブスクリプションウィンドウのサイズ。これは、キューサービスが一度に単一のクライアントインスタンスにプッシュできる最大のデータ数です。

      説明

      プッシュされたデータがコミットされない場合、サーバーは新しいデータをプッシュしません。N 個のデータがコミットされると、サービスキューは N 個の新しいデータをクライアントにプッシュします。これにより、クライアントが一度に処理するデータ項目の数がウィンドウサイズを超えないようにし、クライアントの同時実行を制限します。

    • index_only:インデックス値のみをプッシュするかどうかを指定します。

    • auto_commit:データがプッシュされた後に自動的にコミットするかどうかを指定します。これを False に設定することを推奨します。プッシュされたデータを受信し、計算が完了した後にデータを手動でコミットします。計算が完了する前にインスタンスが失敗した場合、インスタンス上のコミットされていないデータは、キューサービスによって他のインスタンスに分散されて処理されます。

  • 戻り値:プッシュされたデータを読み取るために使用できる Watcher オブジェクト。

commit(index)

  • 説明:指定されたインデックスのデータをコミットします。

    説明

    コミットは、サービスキューによってプッシュされたデータが処理されたことを示します。データはキューから削除でき、他のインスタンスにプッシュする必要はありません。

  • パラメーター:index。キューにコミットするデータのインデックス値のリストです。このパラメーターは、String 型の単一のインデックスまたは複数のインデックスのリストをサポートします。

Watcher クラス

メソッド

説明

run()

  • 説明:Watcher を実行し、サーバーとの WebSocket 接続を確立してデータプッシュを受信し、結果をリアルタイムで呼び出し元に返します。

  • 戻り値:キューサービスからクライアントにリアルタイムでプッシュされる DataFrame オブジェクト。

close()

説明:Watcher オブジェクトを閉じて、バックエンドのデータ接続を終了します。

説明

クライアントは一度に 1 つのアクティブな Watcher しか持つことができません。新しい Watcher を開始する前に、現在の Watcher を閉じる必要があります。

同期推論の例 (入出力フォーマット別)

サービスの入力タイプと出力タイプに基づいてサンプルコードを選択します。

文字列

カスタムプロセッサでサービスをデプロイするユーザーは、通常、PMML モデルサービスなどのサービスコールに文字列を使用します。以下にサンプルプログラムを示します。

#!/usr/bin/env python

from eas_prediction import PredictClient
from eas_prediction import StringRequest

if __name__ == '__main__':
    client = PredictClient('http://182848887922****.cn-shanghai.pai-eas.aliyuncs.com', 'scorecard_pmml_example')
    client.set_token('YWFlMDYyZDNmNTc3M2I3MzMwYmY0MmYwM2Y2MTYxMTY4NzBkNzdj****')
    client.init()

    request = StringRequest('[{"fea1": 1, "fea2": 2}]')
    for x in range(0, 1000000):
        resp = client.predict(request)
        print(resp)

TensorFlow

TensorFlow を使用する場合は、入力および出力データフォーマットとして TFRequest と TFResponse を使用します。以下にサンプルを示します。

#!/usr/bin/env python

from eas_prediction import PredictClient
from eas_prediction import StringRequest
from eas_prediction import TFRequest

if __name__ == '__main__':
    client = PredictClient('http://182848887922****.cn-shanghai.pai-eas.aliyuncs.com', 'mnist_saved_model_example')
    client.set_token('YTg2ZjE0ZjM4ZmE3OTc0NzYxZDMyNmYzMTJjZTQ1YmU0N2FjMTAy****')
    client.init()

    #request = StringRequest('[{}]')
    req = TFRequest('predict_images')
    req.add_feed('images', [1, 784], TFRequest.DT_FLOAT, [1] * 784)
    for x in range(0, 1000000):
        resp = client.predict(req)
        print(resp)

PyTorch

PyTorch を使用する場合は、入力および出力データフォーマットとして TorchRequest と TorchResponse を使用します。以下にサンプルを示します。

#!/usr/bin/env python

from eas_prediction import PredictClient
from eas_prediction import TorchRequest

if __name__ == '__main__':
    client = PredictClient('http://182848887922****.cn-shanghai.pai-eas.aliyuncs.com', 'pytorch_gpu_wl')
    client.init()

    req = TorchRequest()
    req.add_feed(0, [1, 3, 224, 224], TorchRequest.DT_FLOAT, [1] * 150528)
    # req.add_fetch(0)
    import time
    st = time.time()
    timer = 0
    for x in range(0, 10):
        resp = client.predict(req)
        timer += (time.time() - st)
        st = time.time()
        print(resp.get_tensor_shape(0))
        # print(resp)
    print("average response time: %s s" % (timer / 10) )

BladeProcessor

BladeProcessor を使用する場合は、入力および出力データフォーマットとして BladeRequest と BladeResponse を使用します。以下にサンプルを示します。

#!/usr/bin/env python

from eas_prediction import PredictClient
from eas_prediction import BladeRequest

if __name__ == '__main__':
    client = PredictClient('http://182848887922****.cn-shanghai.pai-eas.aliyuncs.com', 'nlp_model_example')
    client.init()

    req = BladeRequest()

    req.add_feed('input_data', 1, [1, 360, 128], BladeRequest.DT_FLOAT, [0.8] * 46080)
    req.add_feed('input_length', 1, [1], BladeRequest.DT_INT32, [187])
    req.add_feed('start_token', 1, [1], BladeRequest.DT_INT32, [104])
    req.add_fetch('output', BladeRequest.DT_FLOAT)
    import time
    st = time.time()
    timer = 0
    for x in range(0, 10):
        resp = client.predict(req)
        timer += (time.time() - st)
        st = time.time()
        # print(resp)
        # print(resp.get_values('output'))
        print(resp.get_tensor_shape('output'))
    print("average response time: %s s" % (timer / 10) )

デフォルトの TensorFlow インターフェイスと互換性のある BladeProcessor

BladeProcessor ユーザーは、入力および出力データフォーマットとして TFRequest と TFResponse を使用できます。これらのフォーマットは、Elastic Algorithm Service (EAS) のデフォルトの TensorFlow インターフェイスと互換性があります。以下にサンプルを示します。

#!/usr/bin/env python

from eas_prediction import PredictClient
from eas_prediction.blade_tf_request import TFRequest # Blade TFRequest のインポートが必要です

if __name__ == '__main__':
    client = PredictClient('http://182848887922****.cn-shanghai.pai-eas.aliyuncs.com', 'nlp_model_example')
    client.init()

    req = TFRequest(signature_name='predict_words')

    req.add_feed('input_data', [1, 360, 128], TFRequest.DT_FLOAT, [0.8] * 46080)
    req.add_feed('input_length', [1], TFRequest.DT_INT32, [187])
    req.add_feed('start_token', [1], TFRequest.DT_INT32, [104])
    req.add_fetch('output')
    import time
    st = time.time()
    timer = 0
    for x in range(0, 10):
        resp = client.predict(req)
        timer += (time.time() - st)
        st = time.time()
        # print(resp)
        # print(resp.get_values('output'))
        print(resp.get_tensor_shape('output'))
    print("average response time: %s s" % (timer / 10) )

VPC 専用接続を使用したサービスコールの例

VPC 専用接続を使用するには、サービスの Virtual Private Cloud (VPC) を設定します。詳細については、「Elastic Algorithm Service (EAS) のリソースグループの使用」および「EAS からパブリックまたは内部リソースへのアクセス」をご参照ください。この呼び出し方式は、通常の方式と比較してコードを 1 行追加するだけで済みます:client.set_endpoint_type(ENDPOINT_TYPE_DIRECT)。この方式は、高トラフィックかつ高同時実行のサービスに最適です。以下に例を示します。

#!/usr/bin/env python

from eas_prediction import PredictClient
from eas_prediction import StringRequest
from eas_prediction import TFRequest
from eas_prediction import ENDPOINT_TYPE_DIRECT

if __name__ == '__main__':
    # VPC 専用接続エンドポイントのフォーマットは <uid>.vpc.<region-id>.pai-eas.aliyuncs.com です。EAS コンソールのサービス詳細ページにある [Invocation Information] タブでエンドポイントを確認できます。
    client = PredictClient('http://182848887922****.vpc.cn-hangzhou.pai-eas.aliyuncs.com', 'mnist_saved_model_example')
    client.set_token('M2FhNjJlZDBmMzBmMzE4NjFiNzZhMmUxY2IxZjkyMDczNzAzYjFi****')
    client.set_endpoint_type(ENDPOINT_TYPE_DIRECT)
    client.init()

    request = TFRequest('predict_images')
    request.add_feed('images', [1, 784], TFRequest.DT_FLOAT, [1] * 784)
    for x in range(0, 1000000):
        resp = client.predict(request)
        print(resp)

例:キューサービスにおけるデータの送信とサブスクライブ

QueueClient を使用して、キューサービスへのデータの送信、データのクエリ、サービスステータスの確認、データプッシュのサブスクライブができます。次のデモでは、2 つのスレッドを使用した例を示します。1 つのスレッドがキューサービスにデータを送信し、もう 1 つのスレッドが Watcher を使用してプッシュされたデータをサブスクライブします。

#!/usr/bin/env python

from eas_prediction import QueueClient
import threading

if __name__ == '__main__':
    endpoint = '182848887922****.cn-shanghai.pai-eas.aliyuncs.com'
    queue_name = 'test_group.qservice/sink'
    token = 'YmE3NDkyMzdiMzNmMGM3ZmE4ZmNjZDk0M2NiMDA3OTZmNzc1MTUx****'

    queue = QueueClient(endpoint, queue_name)
    queue.set_token(token)
    queue.init()
    queue.set_timeout(30000)

    # キュー内のすべてのメッセージを切り捨てます
    attributes = queue.attributes()
    if 'stream.lastEntry' in attributes:
        queue.truncate(int(attributes['stream.lastEntry']) + 1)

    count = 100
    # キューにメッセージを送信するスレッドを作成します
    def send_thread():
        for i in range(count):
            index, request_id = queue.put('[{}]')
            print('send: ', i, index, request_id)

    # キューからのメッセージを監視するスレッドを作成します
    def watch_thread():
        watcher = queue.watch(0, 5, auto_commit=True)
        i = 0
        for x in watcher.run():
            print('recv: ', i, x.index, x.tags['requestId'])
            i += 1
            if i == count:
                break
        watcher.close()

    thread1 = threading.Thread(target=watch_thread)
    thread2 = threading.Thread(target=send_thread)

    thread1.start()
    thread2.start()

    thread1.join()
    thread2.join()

トラブルシューティング

Python SDK の呼び出しで発生する例外の症状、原因、およびトラブルシューティングについては、「サービスコール SDK」の「呼び出し例外のトラブルシューティング」セクションをご参照ください。これらの例外には、認証、ルーティング、接続、サーバーに関する一般的な問題が含まれます。

サービスステータスコード、エラーメッセージの説明、および推奨されるソリューションの完全な一覧については、「付録:サービスステータスコードと一般的なエラー」をご参照ください。