Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 异常时中断光线执行_Python_Python 3.x_Concurrency_Ray - Fatal编程技术网

Python 异常时中断光线执行

Python 异常时中断光线执行,python,python-3.x,concurrency,ray,Python,Python 3.x,Concurrency,Ray,我最近开始与ray合作进行并行执行。在我的串行用例中,我有一个“超时”来停止循环的执行。我想知道如何使用ray做同样的事情 ray当前处理异常的方式是执行所有运行,收集执行期间发生的错误,并在最后显示消息 start_time = time.time() @ray.remote class Test(object): def __init__(self): self.res = None def run(self, c): time.slee

我最近开始与ray合作进行并行执行。在我的串行用例中,我有一个“超时”来停止循环的执行。我想知道如何使用ray做同样的事情

ray当前处理异常的方式是执行所有运行,收集执行期间发生的错误,并在最后显示消息

start_time = time.time()

@ray.remote
class Test(object):

    def __init__(self):
        self.res = None

    def run(self, c):
        time.sleep(0.25)
        print(c)
        self.res = c
        if time.time()-start_time > 1:
            print('Raise error at %d !' % c)
            raise TimeoutError('Time out.....!!')

    def get_res(self):
        return self.res


test = [Test.remote() for _ in range(num_cpus)]

for i in range(num_cpus*2):
    test[i % num_cpus].run.remote(i)

res = ray.get([t.get_res.remote() for t in test])

如果当前作业超时,是否可以中断ray执行下一个作业?是否有一种全局方式来中断执行?

您所说的当前作业是什么意思?Ray是一个分布式环境,部分/所有任务都是并行运行的(而不是顺序运行的,就像在常规python循环中运行一样),因此没有“当前作业”的概念

在任何情况下,使用您的代码:

res = ray.get([t.get_res.remote() for t in test])
您正在等待最后一个任务完成(因此,在所有任务完成/失败之前,不会初始化“res”对象)

您可以做的是对代码稍加修改,并实现如下内容:

res = [t.get_res.remote() for t in test]
from ray.exceptions import RayTaskError

while len(res): 
    done_id, res= ray.wait(res)
    try:
        task_res = ray.get(done_id[0])  # debug/explore 'done_id' object to understand the results output (if task finished successfully or not)
    except (RayTaskError, Exception):  
        ray.shutdown()