2

あるクライアントの Plasma ストアに Python オブジェクトを保存していて、それを別のクライアントにロードしたいと考えています。私の考えは、HTTP 要求の一部として ObjectID を渡すことでした。だから私は次のようなものを持っています:

import pyarrow.plasma as plasma

client = plasma.connect("/tmp/plasma")
payload = {"a": 1}
object_id = client.put(payload)
object_str = str(object_id)
print(object_str)  # outputs: "ObjectID(8d8e54e5cb547962a6d16ff2869c2c3282ff6550)"

目的のクライアントでは、次のようなことができると期待していました。

import pyarrow.plasma as plasma
client = plasma.connect("/tmp/plasma")

data = client.get("8d8e54e5cb547962a6d16ff2869c2c3282ff6550")

しかし、文字列識別子ではなくオブジェクトclient.getを期待しているため、これは機能しません。しかし、この識別子を使用してオブジェクトをplasma.ObjectID作成する方法が見つかりません。plasma.ObjectID20 バイトを渡す必要があると表示されていますが、この ID から適切な 20 バイトを取得する方法がわかりません。plasma.ObjectID(b'8d8e54e5cb547962a6d16ff2869c2c3282ff6550')私は役に立たないようなことを試しました。

私が見つけた唯一の機能は、「client.list()」のようにストア内のすべてのオブジェクトを一覧表示し、返された辞書内の ObjectID キーの文字列表現を文字列照合するハックなソリューションです。

意図した設計に従っていない場合は、どうすればよいですか。

  1. サーバー1のPlasmaにPythonオブジェクトを保存します
  2. あるサーバーから別のサーバーに HTTP 経由で参照を渡す
  3. サーバー 2 でこのオブジェクトにアクセスしますか?
4

1 に答える 1

2

解決策を見つけました。印刷された ObjectID は 16 進数コードです。次のようにバイトに変換できます。

# source
import pyarrow.plasma as plasma
client = plasma.connect("/tmp/plasma")

payload = {"a": 1}
object_id = client.put(payload)
object_str = str(object_id)
print(object_str)  # outputs: "ObjectID(8d8e54e5cb547962a6d16ff2869c2c3282ff6550)"

# client
id_str = "8d8e54e5cb547962a6d16ff2869c2c3282ff6550"
object = plasma.ObjectID(bytes.fromhex(id_str))
data = client.get(object)
于 2020-02-15T22:22:20.133 に答える