from manager import SharedMemoryManager _FIELD_CACHE_GET = None _FIELD_CACHE_SET = None _GA = object.__getattribute__ _SA = object.__setattr__ _DA = object.__delattr__ # determine if our current pid is different from the server PID (i.e. # if we are in a subprocess or not) from src import PROC_MODIFIED_OBJS # get info about the current process and thread _SELF_PID = os.getpid() _SERVER_PID, _PORTAL_PID = get_evennia_pids() _IS_SUBPROCESS = (_SERVER_PID and _PORTAL_PID) and not _SELF_PID in (_SERVER_PID, _PORTAL_PID) _IS_MAIN_THREAD = threading.currentThread().getName() == "MainThread" #_SERVER_PID = None #_PORTAL_PID = None # #global _SERVER_PID, _PORTAL_PID, _IS_SUBPROCESS, _SELF_PID # if not _SERVER_PID and not _PORTAL_PID: # _IS_SUBPROCESS = (_SERVER_PID and _PORTAL_PID) and not _SELF_PID in (_SERVER_PID, _PORTAL_PID) class SharedMemoryModelBase(ModelBase): # CL: upstream had a __new__ method that skipped ModelBase's __new__ if # SharedMemoryModelBase was not in the model class's ancestors. It's not # clear what was the intended purpose, but skipping ModelBase.__new__ # broke things; in particular, default manager inheritance.
AUTO_FLUSH_MIN_INTERVAL = 60.0 * 5 # at least 5 mins between cache flushes _GA = object.__getattribute__ _SA = object.__setattr__ _DA = object.__delattr__ # References to db-updated objects are stored here so the # main process can be informed to re-cache itself. PROC_MODIFIED_COUNT = 0 PROC_MODIFIED_OBJS = WeakValueDictionary() # get info about the current process and thread; determine if our # current pid is different from the server PID (i.e. # if we are in a # subprocess or not) _SELF_PID = os.getpid() _SERVER_PID, _PORTAL_PID = get_evennia_pids() _IS_SUBPROCESS = (_SERVER_PID and _PORTAL_PID) and not _SELF_PID in (_SERVER_PID, _PORTAL_PID) _IS_MAIN_THREAD = threading.currentThread().getName() == "MainThread" class SharedMemoryModelBase(ModelBase): # CL: upstream had a __new__ method that skipped ModelBase's __new__ if # SharedMemoryModelBase was not in the model class's ancestors. It's not # clear what was the intended purpose, but skipping ModelBase.__new__ # broke things; in particular, default manager inheritance. def __call__(cls, *args, **kwargs): """ this method will either create an instance (by calling the default implementation) or try to retrieve one from the class-wide cache by infering the pk value from
""" from sys import getsizeof import os import threading from collections import defaultdict from src.server.models import ServerConfig from src.utils.utils import uses_database, to_str, get_evennia_pids _GA = object.__getattribute__ _SA = object.__setattr__ _DA = object.__delattr__ _IS_SUBPROCESS = os.getpid() in get_evennia_pids() _IS_MAIN_THREAD = threading.currentThread().getName() == "MainThread" # # Set up the cache stores # _ATTR_CACHE = {} _PROP_CACHE = defaultdict(dict) #------------------------------------------------------------ # Cache key hash generation #------------------------------------------------------------ if uses_database( "mysql") and ServerConfig.objects.get_mysql_db_version() < '5.6.4':
""" from sys import getsizeof import os import threading from collections import defaultdict from src.server.models import ServerConfig from src.utils.utils import uses_database, to_str, get_evennia_pids _GA = object.__getattribute__ _SA = object.__setattr__ _DA = object.__delattr__ _IS_SUBPROCESS = os.getpid() in get_evennia_pids() _IS_MAIN_THREAD = threading.currentThread().getName() == "MainThread" # # Set up the cache stores # _ATTR_CACHE = {} _PROP_CACHE = defaultdict(dict) #------------------------------------------------------------ # Cache key hash generation #------------------------------------------------------------ if uses_database("mysql") and ServerConfig.objects.get_mysql_db_version() < '5.6.4': # mysql <5.6.4 don't support millisecond precision