我正在尝试使用MPI将模块广播到其他python进程。当然,模块本身不是可腌制的,但__dict__是可腌制的。目前,我正在腌制__dict__并在接收过程中制作一个新模块。这与某些简单的自定义模块完美配合。但是,当我尝试使用NumPy进行此操作时,有一件我不容易腌制的东西:ufunc

我读过这个线程,建议为__name____module__腌制ufuncimport,但是似乎他们依赖于完全构建并呈现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__属性。)

10-02 10:41