gpt4 book ai didi

python - 帮助如何 pickle ufunc?

转载 作者:太空宇宙 更新时间:2023-11-04 01:39:40 27 4
gpt4 key购买 nike

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

我读过这个线程,它建议对 ufunc__name____module__ 进行 pickling,但它们似乎完全依赖于 numpy在他们重建之前 build 并展示它。我需要避免在接收过程中一起使用 import 语句,所以我很好奇提到的 getattr(numpy,name) 语句是否适用于模块还没有包含 ufunc

此外,我在 NumPy 文档中的 ufunc 上没有看到 __module__ 属性: http://docs.scipy.org/doc/numpy/reference/ufuncs.html

有什么帮助或建议吗?

编辑:抱歉,忘记包含上面提到的线程。 http://mail.scipy.org/pipermail/numpy-discussion/2007-January/025778.html

最佳答案

在 Python 中 Pickling 一个函数只会序列化它的名字和它来自的模块。它不会通过线路传输代码,因此在取消 pickling 时,您需要拥有与 pickling 时相同的可用库。在 unpickling 中,Python 简单地导入有问题的模块,并通过 getattr 获取项目。 (这不仅限于 Numpy,还适用于一般的 pickle 。)

Ufunc 不能完全 pickle ,这是一个缺陷。然后,您的选择主要是只 pickle ufunc 的 __name__(可能还有 __class__),然后手动重建它们。 (它们实际上不是 Python 函数,并且没有 __module__ 属性。)

关于python - 帮助如何 pickle ufunc?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6389775/

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