Skip to content

Task-specific Serializers

🔧 . Ad-hoc Type Registration (Per-Task Serializer)

特定のタスクでしか使わない特殊な型がある場合、グローバルな spot インスタンスに登録するのではなく、そのタスク専用のシリアライザ を作成して渡すことができます。 これにより、他のタスクへの副作用(汚染)を防ぎながら、柔軟な型登録が可能になります。

Scenario: ある関数の中だけで、特殊なバイナリ形式を持つサードパーティ製オブジェクトを扱いたい。

import beautyspot as bs
from beautyspot.serializer import MsgpackSerializer

spot = bs.Spot("my_workspace")

# 1. このタスク専用のシリアライザを作成
# (グローバルの spot.serializer とは独立しています)
local_serializer = MsgpackSerializer()

class MySpecialObject:
    def __init__(self, data):
        self.data = data

# 2. ローカルなシリアライザに型を登録
local_serializer.register(
    type_=MySpecialObject,
    code=100,  # このコード値はこのシリアライザ内でのみ有効です
    encoder=lambda obj: {"data": obj.data},
    decoder=lambda d: MySpecialObject(d["data"])
)

# 3. serializer 引数を使ってタスクに注入
@spot.mark(serializer=local_serializer)
def produce_special_object():
    return MySpecialObject(data="secret_payload")

# cached_run でも同様に使用可能です
with spot.cached_run(produce_special_object, serializer=local_serializer) as task:
    result = task()