damccorm commented on code in PR #40822:
URL: https://github.com/apache/beam/pull/40822#discussion_r4497150661
##########
sdks/python/apache_beam/utils/multi_process_shared.py:
##########
@@ -150,8 +152,22 @@ def release(self, proxy):
def unsafe_hard_delete(self):
with self.lock:
if self.initialied:
+ obj = self.obj
del self.obj
self.initialied = False
+ # When hard-deleting in a spawned server process that exits via
+ # os._exit(0), an in-flight RPC thread (e.g. a timed-out call) may
+ # still hold a stack reference to `obj`, preventing CPython from
+ # invoking `obj.__del__()` before `os._exit(0)`.
+ if (self._hard_delete_callback is not None and
+ sys.getrefcount(obj) > 2 and hasattr(type(obj), '__del__')):
+ try:
+ type(obj).__del__(obj)
Review Comment:
I think we can just skip this part of the PR. This only really matters if
there are shared resources that get cleaned up beyond the object (e.g. shared
file references), the memory itself is guaranteed to get reclaimed. This has no
implications on RunInference, and I think it is a reasonable behavior to not
guarantee in an unsafe deletion scenario.
I'll get rid of this piece.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]