You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pyro5代理获取对象时遭遇“Unsupported serialized class”错误

Pyro5自定义对象序列化问题的简易解决方法

Pyro5对自定义类的序列化有严格的白名单机制,即使serpent能处理该类,Pyro5也需要明确知晓该类允许被序列化,以下是两种无需大量自定义代码的解决方式:

方法一:使用@expose装饰器标记自定义类

直接给Item类添加@expose装饰器,告诉Pyro5该类可以被序列化:

修改classes.py:

from Pyro5.api import expose

class Container:
    @expose
    def get_item(self):
        return Item()

@expose
class Item():
    def __str__(self):
        return "item"

方法二:注册类到Pyro5序列化器

如果不想给类添加@expose,可以在服务端和客户端的代码中,将Item类注册到Pyro5的序列化器:

服务端修改(启动守护进程前添加):

from Pyro5.api import Daemon, SerializerBase
from classes import Container, Item

SerializerBase.register_class_to_serialize(Item)
daemon = Daemon(host="localhost", port=5555)
daemon.register(Container(),"container")
daemon.requestLoop()

客户端修改(创建代理前添加):

from Pyro5.api import Proxy, SerializerBase
from classes import Item

SerializerBase.register_class_to_serialize(Item)
container = Proxy("PYRO:container@localhost:5555")
print(container.get_item())

原理说明

Pyro5默认仅序列化内置类型和标记了@expose的类,通过上述两种方式,将Item类纳入Pyro5的序列化白名单后,就能借助serpent完成自动的序列化与反序列化,解决SerializeError异常。

内容的提问来源于stack exchange,提问作者Ben

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 07:50:03