Skip to content

Commit eb2023e

Browse files
authored
Suppress broken resource errors if cancelling (#3675)
1 parent 3067c8e commit eb2023e

File tree

1 file changed

+10
-7
lines changed
  • pydantic_graph/pydantic_graph/beta

1 file changed

+10
-7
lines changed

pydantic_graph/pydantic_graph/beta/graph.py

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
from dataclasses import dataclass, field
1414
from typing import TYPE_CHECKING, Any, Generic, Literal, TypeGuard, cast, get_args, get_origin, overload
1515

16-
from anyio import CancelScope, create_memory_object_stream, create_task_group
16+
from anyio import BrokenResourceError, CancelScope, create_memory_object_stream, create_task_group
1717
from anyio.abc import TaskGroup
1818
from anyio.streams.memory import MemoryObjectReceiveStream, MemoryObjectSendStream
1919
from typing_extensions import TypeVar, assert_never
@@ -748,12 +748,15 @@ async def _run_tracked_task(self, t_: GraphTask):
748748
with CancelScope() as scope:
749749
self.cancel_scopes[t_.task_id] = scope
750750
result = await self._run_task(t_)
751-
if isinstance(result, _GraphTaskAsyncIterable):
752-
async for new_tasks in result.iterable:
753-
await self.iter_stream_sender.send(_GraphTaskResult(t_, new_tasks, False))
754-
await self.iter_stream_sender.send(_GraphTaskResult(t_, []))
755-
else:
756-
await self.iter_stream_sender.send(_GraphTaskResult(t_, result))
751+
try:
752+
if isinstance(result, _GraphTaskAsyncIterable):
753+
async for new_tasks in result.iterable:
754+
await self.iter_stream_sender.send(_GraphTaskResult(t_, new_tasks, False))
755+
await self.iter_stream_sender.send(_GraphTaskResult(t_, []))
756+
else:
757+
await self.iter_stream_sender.send(_GraphTaskResult(t_, result))
758+
except BrokenResourceError:
759+
pass # pragma: no cover # This can happen in difficult-to-reproduce circumstances when cancelling an asyncio task
757760

758761
async def _run_task(
759762
self,

0 commit comments

Comments
 (0)