gpt4 book ai didi

pickle - mpi4py 尝试发送类时出现 Pickling 错误

转载 作者:行者123 更新时间:2023-12-02 04:01:46 32 4
gpt4 key购买 nike

我使用 mpi4py 将一些计算拆分到多个过程中。基本上我只是计算一些凸包的体积,这是我使用 tvtk 和 mayavi 创建的。

只有第一个过程导入这些库:

...
if rank==0:
from tvtk.api import tvtk
from mayavi Import mlab
...
mlab.figure(size=(1024,768),bgcolor=(1,1,1))
...

然后,我尝试在所有进程之间共享对象 mlab 和 tvtk:

for i in range(comm.Get_size()):
comm.send(mlab,dest=i)
comm.send(tvtk,dest=i)
....

以下步骤看起来像......

Points=local_data
ug=tvtk.UnstructuredGrid(Points=Points)
...
dataname="Data %s " % rank
ds=mlab.pipeline.add_dataset(ug,name=dataname)
delaunay=mlab.pipeline.delaunay3d(ds,name=dataname)
... calc volume...

但是,显然不可能发送实例/类(或任何 mlab 和 tvtk ),因为我总是收到以下错误:

comm.send(mlab,dest=i)
File "Comm.pyx", line 753, in mpi4py.MPI.Comm.send (src/mpi4py.MPI.c:53848)
File "pickled.pxi", line 122, in mpi4py.MPI.PyMPI_send (src/mpi4py.MPI.c:20409)
File "pickled.pxi", line 39, in mpi4py.MPI._p_Pickle.dump (src/mpi4py.MPI.c:19503)
cPickle.PicklingError: Can't pickle <type 'module'>: attribute lookup __builtin__.module failed

有没有办法在所有进程之间“共享”实例 mlab 和 tvtk?

编辑:简短的例子;你能让这个工作吗?

from mpi4py import MPI
comm=MPI.COMM_WORLD

size=comm.Get_size()
rank=comm.Get_rank()

if rank==0:
from tvtk.api import tvtk
from mayavi import mlab

if __name__=='__main__':
if rank==0:
for i in range(size):
comm.send(mlab,dest=i)
comm.send(tvtk,dest=i)
else:
local_mlab=comm.recv(mlab,source=0)
local_tvtk=comm.recv(tvtk,source=0)

最佳答案

我想以下内容可能适合您的情况

from mpi4py import MPI
MPI._p_pickle.dumps = dill.dumps
MPI._p_pickle.loads = dill.loads

关于pickle - mpi4py 尝试发送类时出现 Pickling 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21756926/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com