You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by ke...@apache.org on 2022/10/05 00:51:15 UTC

[skywalking-python] branch master updated: feat: make some meter methods thread safe (#241)

This is an automated email from the ASF dual-hosted git repository.

kezhenxu94 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/skywalking-python.git


The following commit(s) were added to refs/heads/master by this push:
     new 196fda2  feat: make some meter methods thread safe (#241)
196fda2 is described below

commit 196fda2e303a0174ed9cd68fd64e4a37a0499045
Author: jiang1997 <ji...@live.cn>
AuthorDate: Wed Oct 5 08:51:10 2022 +0800

    feat: make some meter methods thread safe (#241)
---
 skywalking/meter/counter.py   | 7 +++++--
 skywalking/meter/histogram.py | 6 ++++--
 2 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/skywalking/meter/counter.py b/skywalking/meter/counter.py
index 1a1edec..5fe5389 100644
--- a/skywalking/meter/counter.py
+++ b/skywalking/meter/counter.py
@@ -15,6 +15,7 @@
 # limitations under the License.
 #
 
+import threading
 import timeit
 from enum import Enum
 from skywalking.meter.meter import BaseMeter, MeterType
@@ -32,9 +33,11 @@ class Counter(BaseMeter):
         self.count = 0
         self.previous = 0
         self.mode = mode
+        self._lock = threading.Lock()
 
     def increment(self, value):
-        self.count += value
+        with self._lock:
+            self.count += value
 
     def get(self):
         return self.count
@@ -42,8 +45,8 @@ class Counter(BaseMeter):
     def transform(self):
         current_value = self.get()
         if self.mode == CounterMode.RATE:
-            self.previous = current_value
             count = current_value - self.previous
+            self.previous = current_value
         else:
             count = current_value
 
diff --git a/skywalking/meter/histogram.py b/skywalking/meter/histogram.py
index 5c5e5df..8bd941c 100644
--- a/skywalking/meter/histogram.py
+++ b/skywalking/meter/histogram.py
@@ -15,6 +15,7 @@
 # limitations under the License.
 #
 
+import threading
 import timeit
 from skywalking.meter.meter import BaseMeter, MeterType
 from skywalking.protocol.language_agent.Meter_pb2 import MeterBucketValue, MeterData, MeterHistogram
@@ -79,13 +80,14 @@ class Histogram(BaseMeter):
         return Histogram.Timer(self)
 
     class Bucket():
-
         def __init__(self, bucket):
             self.bucket = bucket
             self.count = 0
+            self._lock = threading.Lock()
 
         def increment(self, count):
-            self.count += count
+            with self._lock:
+                self.count += count
 
         def transform(self):
             return MeterBucketValue(bucket=self.bucket, count=self.count)