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.")