Skip to content

Commit

Permalink
Implement workaround for upstream problem in CPython
Browse files Browse the repository at this point in the history
  • Loading branch information
tskisner committed Mar 17, 2024
1 parent f6b1dab commit 95e19fa
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 1 deletion.
10 changes: 9 additions & 1 deletion pshmem/shmem.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,15 @@

import numpy as np

from .utils import mpi_data_type, random_shm_key
from .utils import (
mpi_data_type,
random_shm_key,
remove_shm_from_resource_tracker,
)

# Monkey patch resource_tracker. Remove once upstream CPython
# changes are merged.
remove_shm_from_resource_tracker()


class MPIShared(object):
Expand Down
24 changes: 24 additions & 0 deletions pshmem/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@

import random
import sys
# Import for monkey patching resource tracker
from multiprocessing import resource_tracker

import numpy as np

Expand Down Expand Up @@ -62,3 +64,25 @@ def random_shm_key():
# Seed with default source of randomness
random.seed(a=None)
return random.randint(min_val, max_val)


def remove_shm_from_resource_tracker():
"""Monkey-patch multiprocessing.resource_tracker so SharedMemory won't be tracked
More details at: https://bugs.python.org/issue38119
"""

def fix_register(name, rtype):
if rtype == "shared_memory":
return
return resource_tracker._resource_tracker.register(self, name, rtype)
resource_tracker.register = fix_register

def fix_unregister(name, rtype):
if rtype == "shared_memory":
return
return resource_tracker._resource_tracker.unregister(self, name, rtype)
resource_tracker.unregister = fix_unregister

if "shared_memory" in resource_tracker._CLEANUP_FUNCS:
del resource_tracker._CLEANUP_FUNCS["shared_memory"]

0 comments on commit 95e19fa

Please sign in to comment.