【问题标题】:ipython parallel push custom objectipython并行推送自定义对象
【发布时间】:2014-06-19 23:54:57
【问题描述】:

我无法将对象发送给直接查看工作人员。 这是我想做的:

类测试: def __init__(self): self.id = 'ddfdf' 从 IPython.parallel 导入客户端 rc = 客户端() dv = rc[:] t = 测试() dv['t'] = t 打印 dv['t'] NameError:名称“t”未定义

如果我尝试推送 pandas 对象或任何内置对象,这将起作用。 使用自定义对象的方法是什么?

我试过了:

dv['Test'] = 测试 dv['t'] = t 打印 dv['t'] UnpicklingError: NEWOBJ 类参数不是类型对象

【问题讨论】:

  • 了解 pickle 的工作原理后,尝试在实例 (t) 之前推送类 (Test)。
  • 有没有办法在不先推送课程的情况下做到这一点?

标签: parallel-processing ipython


【解决方案1】:

对于交互式定义的类(在__main__),您确实需要推送类定义,或使用dill。但即使这样似乎也不适用于旧式类,这是 IPython 处理旧式类[1] 中的一个错误。如果您使用新样式的类,则此代码可以正常工作:

class Test(object):
    ...

而不是老式的类。请注意,旧式类在 Python 3 中不可用。 无论如何,始终使用新式类通常是个好主意。

【讨论】:

  • minrk:您的建议适用于该示例,但是当我从文件中导入测试类时:'from test import Test' 然后 dv['Test'] = Test 将失败。你有什么建议吗?
  • 如果它在模块中,您不需要推送测试,但模块本身确实需要可用。模块是本地文件吗?如果是这样,最好将文件发送到您的所有机器。如果您的引擎是本地的,那么您可能只想确保引擎具有与客户端相同的 CWD。​​span>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-05
  • 2017-11-10
相关资源
最近更新 更多