我正在使用多处理,我知道pickle模块实现了用于序列化和反序列化Python对象结构的二进制协议。
而且我也知道哪些类型的数据可以被腌制,比如整数,列表,集合...... ....
但是如果我想使用其他不是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
我应该怎样做才能解决这个问题?
答案 0 :(得分:0)
我不认为这是可行的,因为python只是C ++对象的轻包装。 现在,线性求解器和CP-SAT求解器支持将模型存储在protobuf对象中,该对象可以序列化。
这确实引起了一些问题,因为在创建模型时,您会创建链接到模型的变量。序列化后,您将没有这些变量。因此,查询solve()的解决方案很复杂。