From 0a17acaecc0d9074fa01a793c7791814b3453ae9 Mon Sep 17 00:00:00 2001 From: sjaanus Date: Sun, 31 Jul 2022 16:35:17 +0000 Subject: [PATCH 1/2] Multiprocessing test --- UnleashClient/__init__.py | 3 ++- UnleashClient/features/Feature.py | 10 ++++++-- .../periodic_tasks/fetch_and_load.py | 24 ++++++++++++++++++- 3 files changed, 33 insertions(+), 4 deletions(-) diff --git a/UnleashClient/__init__.py b/UnleashClient/__init__.py index b006f9e2..08f544cf 100644 --- a/UnleashClient/__init__.py +++ b/UnleashClient/__init__.py @@ -14,6 +14,7 @@ from .utils import LOGGER from .deprecation_warnings import strategy_v2xx_deprecation_check from .cache import BaseCache, FileCache +import os # pylint: disable=dangerous-default-value class UnleashClient: @@ -250,7 +251,7 @@ def is_enabled(self, :return: Feature flag result """ context = context or {} - + print("init.py.is_enabled on process id: " + str(os.getpid()) + "

") # Update context with static values context.update(self.unleash_static_context) diff --git a/UnleashClient/features/Feature.py b/UnleashClient/features/Feature.py index 16d932c3..7844ce89 100644 --- a/UnleashClient/features/Feature.py +++ b/UnleashClient/features/Feature.py @@ -2,7 +2,7 @@ from UnleashClient.variants import Variants from UnleashClient.utils import LOGGER from UnleashClient.constants import DISABLED_VARIATION - +import os # pylint: disable=dangerous-default-value, broad-except class Feature: @@ -60,7 +60,7 @@ def is_enabled(self, :return: """ flag_value = False - + print("Feature.is_enabled on process id: " + str( os.getpid()) + "

") if self.enabled: try: if self.strategies: @@ -77,6 +77,12 @@ def is_enabled(self, LOGGER.info("Feature toggle status for feature %s: %s", self.name, flag_value) + from multiprocessing import Process, Manager + + manager = Manager() + d = manager.dict() + print("Get from manager in feature.py") + print(d) return flag_value def get_variant(self, diff --git a/UnleashClient/periodic_tasks/fetch_and_load.py b/UnleashClient/periodic_tasks/fetch_and_load.py index a158ec76..93d5ec5b 100644 --- a/UnleashClient/periodic_tasks/fetch_and_load.py +++ b/UnleashClient/periodic_tasks/fetch_and_load.py @@ -3,7 +3,7 @@ from UnleashClient.constants import FEATURES_URL, ETAG from UnleashClient.utils import LOGGER from UnleashClient.cache import BaseCache - +import os def fetch_and_load_features(url: str, app_name: str, @@ -25,6 +25,28 @@ def fetch_and_load_features(url: str, ) if feature_provisioning: + # if there is somethign in shared memory, take it from there? + # write it to cache + # here i will write to the shared memory + + + # from multiprocessing import shared_memory + # print(type(feature_provisioning)) + # shm = shared_memory.SharedMemory(name="shared_features", create=True, size=len(feature_provisioning)) + # shm.buf = feature_provisioning + # print("Writing to memory") + # print(shm.buf) + + from multiprocessing import Process, Manager + + manager = Manager() + d = manager.dict() + print("Get from manager before save") + print(d) + d['test'] = 'test' + print("Get from manager after save") + print(d) + print("Get from manager after saveprocess id: " + str(os.getpid()) + "

") cache.set(FEATURES_URL, feature_provisioning) else: LOGGER.debug("No feature provisioning returned from server, using cached provisioning.") From 9ceb6ffb9de8618847c0c226b8d02c48afadd496 Mon Sep 17 00:00:00 2001 From: sjaanus Date: Mon, 1 Aug 2022 06:36:43 +0000 Subject: [PATCH 2/2] Add namespace check --- UnleashClient/features/Feature.py | 7 ++++++- UnleashClient/periodic_tasks/fetch_and_load.py | 9 +++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/UnleashClient/features/Feature.py b/UnleashClient/features/Feature.py index 7844ce89..43bff78e 100644 --- a/UnleashClient/features/Feature.py +++ b/UnleashClient/features/Feature.py @@ -77,12 +77,17 @@ def is_enabled(self, LOGGER.info("Feature toggle status for feature %s: %s", self.name, flag_value) - from multiprocessing import Process, Manager + from multiprocessing import Manager + import multiprocessing manager = Manager() d = manager.dict() print("Get from manager in feature.py") print(d) + print("Process " + multiprocessing.current_process().name) + print("Process " + str(type(multiprocessing.current_process()))) + Global = manager.Namespace() + print(Global) return flag_value def get_variant(self, diff --git a/UnleashClient/periodic_tasks/fetch_and_load.py b/UnleashClient/periodic_tasks/fetch_and_load.py index 93d5ec5b..d0713f53 100644 --- a/UnleashClient/periodic_tasks/fetch_and_load.py +++ b/UnleashClient/periodic_tasks/fetch_and_load.py @@ -37,17 +37,22 @@ def fetch_and_load_features(url: str, # print("Writing to memory") # print(shm.buf) - from multiprocessing import Process, Manager + import multiprocessing + from multiprocessing import Manager manager = Manager() + Global = manager.Namespace() + Global.x = 10 d = manager.dict() print("Get from manager before save") print(d) + print(Global) d['test'] = 'test' print("Get from manager after save") print(d) print("Get from manager after saveprocess id: " + str(os.getpid()) + "

") - cache.set(FEATURES_URL, feature_provisioning) + print("Process " + multiprocessing.current_process().name) + print("Process " + str(type(multiprocessing.current_process()))) else: LOGGER.debug("No feature provisioning returned from server, using cached provisioning.")