【发布时间】:2016-05-30 13:36:43
【问题描述】:
到目前为止,我是这样做的:
rets=set(pool.map_async(my_callback, args.hosts).get(60*4))
如果超时,我会得到一个异常:
File "/usr/lib/python2.7/multiprocessing/pool.py", line 524, in get
raise TimeoutError
multiprocessing.TimeoutError
我想优雅地处理这个:
我可以访问的所有主机的输出都应该进入rets,所有超时的主机应该进入一个单独的列表。
这是怎么做到的?
【问题讨论】:
-
try-except 显然是解决方案,所以我想知道有什么问题?
-
hosts I could reach进入try,all hosts which timed out进入TimeoutError exception....这里的火箭科学在哪里? -
@JohnMee 你说 try-except 是解决方案。但是怎么做?我 my_callback() 被并行调用 100 次。代码中有一行:调用 map_async()。如果引发异常,AFAIK
rets为空。如何获取两个列表:未超时调用的结果和超时主机列表? -
啊,我明白了,“捕获”是一切都发生在单行中。您需要trawl through the docs 并弄清楚如何将其分解为多行问题,这样您就有一个语句调用一个进程,从而可以捕获该进程的超时,而不能捕获其他进程。
标签: python python-multiprocessing