IPython 并行:如何从 IPcontroller 恢复作业 ID
IPython parallel : how to recover job IDs from IPcontroller
我有一个服务器 运行 IP 控制器和 12 个 IPengines。我使用 SSH 从笔记本电脑连接到控制器。我使用负载平衡视图接口(在非阻塞模式下)向控制器提交了一些作业,并将消息 ID 存储在由 apply_async() 方法返回的异步结果对象中。
我不小心丢失了作业的消息 ID,想知道是否有办法从 Hub 数据库中检索作业 ID(或结果)。我为 Hub 使用 SQLite 数据库,我可以使用 rc.db_query() 方法,但我不知道要查找什么。
有谁知道如何仅查询 Hub 数据库以获取我提交的作业的消息 ID?如果我无权访问 AsyncHubResult 对象(或其消息 ID),从 Hub 检索作业结果的最简单方法是什么?
谢谢!
如果没有消息 ID,您可能很难找到正确的任务,除非提交的任务不多。
查询基于MongoDB(当你使用mongodb时它是一个passthrough,并且为sqlite实现了一个简单运算符的子集)。
快速总结:一个查询就是一个字典。如果您使用文字值,它们是相等性测试,但您可以使用字典值作为比较运算符。
您可以按日期搜索任何时间戳:
- 提交:到达控制器
- 开始:到达引擎
- 已完成:在引擎上完成
比如查找昨天提交的任务:
from datetime import date, time, timedelta, datetime
# round to midnight
today = datetime.combine(date.today(), time())
yesterday = today - timedelta(days=1)
rc.db_query({'submitted': {
'$lt': today, # less than midnight last night
'$gt': yesterday, # greater than midnight the night before
}})
或1-4小时前提交的所有任务:
found = rc.db_query({'submitted': {
'$lt': datetime.now() - timedelta(hours=1),
'$gt': datetime.now() - timedelta(hours=4),
}})
根据结果,您可以查看 client_uuid
之类的键来检索给定客户端实例(例如单个笔记本或脚本)提交的所有消息:
client_id = found[0]['client_uuid']
all_from_client = rc.db_query({'client_uuid': client_uuid})
由于此时您只对结果感兴趣,您可以指定 keys=['msg_id']
以仅检索消息 ID。然后我们可以使用这些 msg_ids 来获取单个客户端会话产生的所有结果:
# construct list of msg_ids
msg_ids = [ r['msg_id'] for r in rc.db_query({'client_uuid': client_uuid}, keys=['msg_id']) ]
# use client.get_result to retrieve the actual results:
results = rc.get_result(msg_ids)
此时,您拥有所有结果,但您失去了哪些结果来自哪个执行的关联。没有太多信息可以帮助您,但您可以通过类型、时间戳或可能 select 给定会话的 9 个最终项目来判断。
我有一个服务器 运行 IP 控制器和 12 个 IPengines。我使用 SSH 从笔记本电脑连接到控制器。我使用负载平衡视图接口(在非阻塞模式下)向控制器提交了一些作业,并将消息 ID 存储在由 apply_async() 方法返回的异步结果对象中。
我不小心丢失了作业的消息 ID,想知道是否有办法从 Hub 数据库中检索作业 ID(或结果)。我为 Hub 使用 SQLite 数据库,我可以使用 rc.db_query() 方法,但我不知道要查找什么。
有谁知道如何仅查询 Hub 数据库以获取我提交的作业的消息 ID?如果我无权访问 AsyncHubResult 对象(或其消息 ID),从 Hub 检索作业结果的最简单方法是什么?
谢谢!
如果没有消息 ID,您可能很难找到正确的任务,除非提交的任务不多。
查询基于MongoDB(当你使用mongodb时它是一个passthrough,并且为sqlite实现了一个简单运算符的子集)。
快速总结:一个查询就是一个字典。如果您使用文字值,它们是相等性测试,但您可以使用字典值作为比较运算符。
您可以按日期搜索任何时间戳:
- 提交:到达控制器
- 开始:到达引擎
- 已完成:在引擎上完成
比如查找昨天提交的任务:
from datetime import date, time, timedelta, datetime
# round to midnight
today = datetime.combine(date.today(), time())
yesterday = today - timedelta(days=1)
rc.db_query({'submitted': {
'$lt': today, # less than midnight last night
'$gt': yesterday, # greater than midnight the night before
}})
或1-4小时前提交的所有任务:
found = rc.db_query({'submitted': {
'$lt': datetime.now() - timedelta(hours=1),
'$gt': datetime.now() - timedelta(hours=4),
}})
根据结果,您可以查看 client_uuid
之类的键来检索给定客户端实例(例如单个笔记本或脚本)提交的所有消息:
client_id = found[0]['client_uuid']
all_from_client = rc.db_query({'client_uuid': client_uuid})
由于此时您只对结果感兴趣,您可以指定 keys=['msg_id']
以仅检索消息 ID。然后我们可以使用这些 msg_ids 来获取单个客户端会话产生的所有结果:
# construct list of msg_ids
msg_ids = [ r['msg_id'] for r in rc.db_query({'client_uuid': client_uuid}, keys=['msg_id']) ]
# use client.get_result to retrieve the actual results:
results = rc.get_result(msg_ids)
此时,您拥有所有结果,但您失去了哪些结果来自哪个执行的关联。没有太多信息可以帮助您,但您可以通过类型、时间戳或可能 select 给定会话的 9 个最终项目来判断。