我正在尝试使用MPI将模块广播到其他python进程。当然,模块本身不是可腌制的,但__dict__
是可腌制的。目前,我正在腌制__dict__
并在接收过程中制作一个新模块。这与某些简单的自定义模块完美配合。但是,当我尝试使用NumPy进行此操作时,有一件我不容易腌制的东西:ufunc
。
我读过这个线程,建议为__name__
和__module__
腌制ufunc
和import
,但是似乎他们依赖于完全构建并呈现numpy来重建它们。我需要避免在接收过程中一起使用getattr(numpy,name)
语句,因此,我很好奇所提到的ufunc
语句是否可以与尚未包含__module__
的模块一起使用。
另外,我在NumPy文档的ufunc
上没有看到属性:
http://docs.scipy.org/doc/numpy/reference/ufuncs.html
有什么帮助或建议吗?
编辑:对不起,忘了包括上述线程。 http://mail.scipy.org/pipermail/numpy-discussion/2007-January/025778.html
最佳答案
在Python中腌制一个函数只会序列化其名称和其来源的模块。它不会通过导线传输代码,因此,在进行酸洗时,需要具有与酸洗时相同的库。解开代码时,Python只需导入有问题的模块,然后通过getattr
获取项目。 (这不仅限于Numpy,而且通常适用于酸洗。)
Ufuncs不能干净地腌制,这是一种疣。然后,您的选择主要是仅腌制ufunc的__name__
(也许还有__class__
),然后稍后手动对其进行重构。 (它们实际上不是Python函数,并且没有__module__
属性。)