我正在做一些并行计算,评估许多回归的拟合优度。在这样做(运行约 60K 计算)时,我设法让 iPython 进入了一个奇怪的状态。
将对象推送到所有节点
%%px
model_analytics = ResultsAnalytics(rows, store['data_model'])
并派遣工作:
%%time
ar = lview.map(lambda x: model_analytics.generate_prediction_heuristic(x), rows.index)
工作正常。事实上,大部分工作都已完成:
%%time
completed = ar.progress
print completed
print "Remaining {0} min".format((ar.elapsed/completed) * (len(rows) - completed)/60)
66229
剩余 0.0205939930854 分钟
CPU 时间:用户 211 毫秒,系统:163 毫秒,总计:374 毫秒
挂墙时间:364 毫秒
但是有一项工作没有完成!
for i, status in enumerate(ar.status):
if status != 'ok': print i, status
35230 无
msg = ar.msg_ids[35230]
lview.abort(msg)
print lview.get_result(msg)
print lview.wait(jobs=msg, timeout=5)
<AsyncResult: unknown>
错误的
编辑:我希望我能得到所有的结果,除了已经失效的结果,但没有快乐。
msgs = ar.msg_ids[0:35230]
res1 = [lview.get_result(msg) for msg in msgs]
print res1[0:10]
[<AsyncResult: unknown>, <AsyncResult: unknown>, <AsyncResult: unknown>, <AsyncResult: unknown>, <AsyncResult: unknown>, <AsyncResult: unknown>, <AsyncResult: unknown>, <AsyncResult: unknown>, <AsyncResult: unknown>, <AsyncResult: unknown>]
我还没有尝试重现这一点。什么可能导致此错误?做错什么了吗?有没有更优雅的方式来从这种情况中恢复过来?
版本:
- IPython:3.2.1
- pyzmq:14.7.0
- zeromq: dpkg -l | grep libzmq 产生:
ii libzmq-dev:amd64 2.2.0+dfsg-5 amd64 轻量级消息传递内核(开发文件) ii libzmq1:amd64 2.2.0+dfsg-5 amd64 轻量级消息传递内核(共享库)