有一个奇怪的问题,即H2O框架无法从群集中获取其frame_id
属性。
有一个进程执行固定循环,在该循环上对水帧c
进行一些处理,然后将其行绑定到另一帧a
,以节省群集上的内存,我想删除行绑定之前的a
的“旧版本”,因此使用另一帧b
作为指向旧a
的指针,该行在绑定后被删除会返回另一帧被分配给的。例如
# in some for loop
...
b = a.frame_id
print '1. %s, %s' % (a.frame_id, b)
a = a.rbind(c)
print '2. %s, %s' % (a.frame_id, b)
h2o.remove(b)
...
我看到的输出看起来像
1. Key_Frame__upload_bce99720cff0008f4b44c6c71dd54c0d.hex, Key_Frame__upload_bce99720cff0008f4b44c6c71dd54c0d.hex
2. py_2_sid_b35e, Key_Frame__upload_bce99720cff0008f4b44c6c71dd54c0d.hex
1. py_2_sid_b35e, py_2_sid_b35e
H2OResponseError: Server error java.lang.IllegalArgumentException:
Error: Name lookup of 'Key_Frame__upload_bce99720cff0008f4b44c6c71dd54c0d.hex' failed
Request: POST /99/Rapids
data: {u'session_id': '_sid_b35e', u'ast': '(tmp= py_3_sid_b35e (rbind Key_Frame__upload_bce99720cff0008f4b44c6c71dd54c0d.hex X7924123d_f1eb_46a8_bf2a_59cfbc5b887c.hex X44795656_48aa_4b77_a5b1_6948d733473e.hex))'}
错误消息引用了(据说)先前删除的对象ID字符串,这一事实使我认为这是集群的某种线程问题(例如无法立即获得{{ 1}}结果框架)(特别是因为在我的IDE中以调试模式运行代码时,不会出现此问题,只有在正常模式下运行时才会出现此问题)。对frame_id
的呼叫是异步的还是非阻塞的?因此请注意,如果不存在print语句来捕获错误,则rbind
只会抛出该错误,而无法删除h2o实例上的旧框架。有人知道这里会发生什么吗?