1

我正在使用多处理,并且我知道 pickle 模块实现了用于序列化和反序列化 Python 对象结构的二进制协议。

而且我还知道可以腌制哪些类型的数据,例如 Integer、List、Set 和 ...。

但是,如果我想使用其他不是 pick_able 的数据,我应该怎么做?

更准确地说,我想使用多处理来并行 ORTools 中的创建约束。打击是我的代码:

manager = Manager()
constraints = manager.list(range(16))

def constraint_saz():
    "constraint's condition"

# Create the constraints        
for i in range(len(data)):
    constraints[i] = solver.Constraint(1,1)
    p = Process(target=constraint_saz, args=(constraints,i))
    p.start()
    p.join()    

但我得到了这个错误:

TypeError: can't pickle SwigPyObject objects

我应该怎么做才能解决这个问题?

4

1 回答 1

0

我不相信这是可行的,因为 python 只是 C++ 对象的一个​​轻包装器。现在,线性求解器和 CP-SAT 求解器支持将模型存储在可以序列化的 protobuf 对象中。

它确实引发了一些问题,因为当您创建模型时,您会创建链接到模型的变量。序列化后,您没有这些变量可用。所以查询solve()的解是复杂的。

于 2019-03-23T10:55:29.113 回答