Python 如何从ObjectID的字符串表示形式创建ObjectID[pyarrow]

Python 如何从ObjectID的字符串表示形式创建ObjectID[pyarrow],python,pyarrow,plasma,Python,Pyarrow,Plasma,我将一个Python对象保存到一个客户端的Plasma存储中,并希望在另一个客户端中加载它。我的想法是作为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)

我将一个Python对象保存到一个客户端的Plasma存储中,并希望在另一个客户端中加载它。我的想法是作为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")
在我的目标客户机中,我希望我能够执行以下操作:

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.ObjectID
对象。它说我需要传入20个字节,但我不确定如何从这个ID中获取正确的20个字节。我尝试过类似于
plasma.ObjectID(b'8d8e54e5cb547962a6d16ff2869c2c282ff6550')
的方法,但没有效果

我发现唯一有效的方法是列出存储中的所有对象(如“client.list()”),然后在返回的字典中列出与ObjectID键的字符串表示形式相匹配的字符串

如果我没有遵循预期的设计,我该如何:

  • 将python对象保存到服务器1中的Plasma
  • 通过HTTP将引用从一台服务器传递到另一台服务器
  • 是否在服务器2中访问此对象

  • 找到了解决办法。打印的ObjectID是一个十六进制代码。您可以将其转换为如下所示的字节:

    # 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)