From ac891b78f859ac710eeccf4e1f022a87ca6fcab0 Mon Sep 17 00:00:00 2001 From: qazal <77887910+Qazalin@users.noreply.github.com> Date: Thu, 19 Jun 2025 15:31:40 +0300 Subject: [PATCH] skip UOp del when python is shutting down [pr] (#10847) --- tinygrad/uop/ops.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/tinygrad/uop/ops.py b/tinygrad/uop/ops.py index ebad656a6d..55e49a81ae 100644 --- a/tinygrad/uop/ops.py +++ b/tinygrad/uop/ops.py @@ -74,10 +74,12 @@ class UOp(MathTrait, metaclass=UOpMetaClass): tag:Any = None children:set[weakref.ref[UOp]] = field(default_factory=set) def __del__(self): - if self.op is Ops.BUFFER and (buffer:=buffers.get(self)) is not None: buffer.ref(-1) - if (ref:=UOpMetaClass.ucache.get(k:=(self.op, self.dtype, self.src, self.arg, self.tag))) is not None: - for s in self.src: s.children.discard(ref) - del UOpMetaClass.ucache[k] + if Ops is not None and self.op is Ops.BUFFER and (buffer:=buffers.get(self)) is not None: buffer.ref(-1) + try: + if (ref:=UOpMetaClass.ucache.get(k:=(self.op, self.dtype, self.src, self.arg, self.tag))) is not None: + for s in self.src: s.children.discard(ref) + del UOpMetaClass.ucache[k] + except AttributeError: pass def __reduce__(self): args = [self.op, self.dtype, self.src, self.arg, self.tag, self.metadata] if self.op is Ops.BUFFER and self.realized is not None and PICKLE_BUFFERS: args.append(self.realized)