def test_retries(loop): args = [ZeroDivisionError("one"), ZeroDivisionError("two"), 42] with cluster() as (s, [a, b]): with Client(s['address'], loop=loop) as c: with c.get_executor(retries=3, pure=False) as e: future = e.submit(varying(args)) assert future.result() == 42 with c.get_executor(retries=2) as e: future = e.submit(varying(args)) result = future.result() assert result == 42 with c.get_executor(retries=1) as e: future = e.submit(varying(args)) with pytest.raises(ZeroDivisionError) as exc_info: res = future.result() exc_info.match("two") with c.get_executor(retries=0) as e: future = e.submit(varying(args)) with pytest.raises(ZeroDivisionError) as exc_info: res = future.result() exc_info.match("one")
async def test_annotations_blockwise_unpack(c, s, a, b): da = pytest.importorskip("dask.array") np = pytest.importorskip("numpy") from dask.array.utils import assert_eq # A flaky doubling function -- need extra args because it is called before # application to establish dtype/meta. scale = varying([ZeroDivisionError("one"), ZeroDivisionError("two"), 2, 2]) def flaky_double(x): return scale() * x # A reliable double function. def reliable_double(x): return 2 * x x = da.ones(10, chunks=(5,)) # The later annotations should not override the earlier annotations with dask.annotate(retries=2): y = x.map_blocks(flaky_double, meta=np.array((), dtype=np.float_)) with dask.annotate(retries=0): z = y.map_blocks(reliable_double, meta=np.array((), dtype=np.float_)) with dask.config.set(optimization__fuse__active=False): z = await c.compute(z) assert_eq(z, np.ones(10) * 4.0)
def test_retries(client): args = [ZeroDivisionError("one"), ZeroDivisionError("two"), 42] with client.get_executor(retries=5, pure=False) as e: future = e.submit(varying(args)) assert future.result() == 42 with client.get_executor(retries=4) as e: future = e.submit(varying(args)) result = future.result() assert result == 42 with client.get_executor(retries=2) as e: future = e.submit(varying(args)) with pytest.raises(ZeroDivisionError, match="two"): res = future.result() with client.get_executor(retries=0) as e: future = e.submit(varying(args)) with pytest.raises(ZeroDivisionError, match="one"): res = future.result()
def test_retries(client): args = [ZeroDivisionError("one"), ZeroDivisionError("two"), 42] with client.get_executor(retries=3, pure=False) as e: future = e.submit(varying(args)) assert future.result() == 42 with client.get_executor(retries=2) as e: future = e.submit(varying(args)) result = future.result() assert result == 42 with client.get_executor(retries=1) as e: future = e.submit(varying(args)) with pytest.raises(ZeroDivisionError) as exc_info: res = future.result() exc_info.match("two") with client.get_executor(retries=0) as e: future = e.submit(varying(args)) with pytest.raises(ZeroDivisionError) as exc_info: res = future.result() exc_info.match("one")
def test_retries(c, s, a, b): args = [ZeroDivisionError("one"), ZeroDivisionError("two"), 42] future = c.submit(varying(args), retries=3) result = yield future assert result == 42 assert s.tasks[future.key].retries == 1 assert future.key not in s.exceptions future = c.submit(varying(args), retries=2, pure=False) result = yield future assert result == 42 assert s.tasks[future.key].retries == 0 assert future.key not in s.exceptions future = c.submit(varying(args), retries=1, pure=False) with pytest.raises(ZeroDivisionError) as exc_info: res = yield future exc_info.match("two") future = c.submit(varying(args), retries=0, pure=False) with pytest.raises(ZeroDivisionError) as exc_info: res = yield future exc_info.match("one")