Skip to content

Commit ff50adf

Browse files
committed
⚡ Remove threading
1 parent 1ed41ab commit ff50adf

File tree

1 file changed

+8
-29
lines changed

1 file changed

+8
-29
lines changed

src/repl_python_wakatime/backends/codestats.py

Lines changed: 8 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,12 @@
88

99
import json
1010
import logging
11-
import threading
1211
from dataclasses import dataclass
1312
from datetime import datetime
1413
from http.client import HTTPException
1514
from socket import gethostname
1615
from ssl import CertificateError
17-
from time import sleep
18-
from typing import NoReturn
16+
from time import time
1917
from urllib.error import URLError
2018
from urllib.request import Request, urlopen
2119

@@ -36,7 +34,6 @@ class CodeStats(Hook):
3634
user_name: str = gethostname()
3735
url: str = "https://codestats.net/api/my/pulses"
3836
interval: int = 10 # interval at which stats are sent
39-
sleep_interval: float = 0.1 # sleep interval for timeslicing
4037
timeout: int = 2 # request timeout value (in seconds)
4138

4239
def __post_init__(
@@ -59,9 +56,7 @@ def __post_init__(
5956
raise NoKeyringError
6057

6158
self.xp_dict = {self.language_type: 0}
62-
self.sem = threading.Semaphore()
63-
self.thread = threading.Thread(target=self.run, daemon=True)
64-
self.thread.start()
59+
self.time = time()
6560

6661
def __call__(self, xp: int = 1) -> None:
6762
"""Add xp.
@@ -72,26 +67,26 @@ def __call__(self, xp: int = 1) -> None:
7267
:type xp: int
7368
:rtype: None
7469
"""
75-
self.sem.acquire()
7670
self.xp_dict[self.language_type] += xp
77-
self.sem.release()
71+
if time() - self.time > self.interval:
72+
self.send_xp()
73+
self.time = time()
74+
75+
def __del__(self) -> None:
76+
self.send_xp()
7877

7978
def send_xp(self) -> None:
8079
"""Send xp.
8180
82-
Acquire the lock to get the list of xp to send.
83-
8481
:rtype: None
8582
"""
8683
if len(self.xp_dict) == 0:
8784
return
8885

89-
self.sem.acquire()
9086
xp_list = [
9187
{"language": ft, "xp": xp} for ft, xp in self.xp_dict.items()
9288
]
9389
self.xp_dict = {self.language_type: 0}
94-
self.sem.release()
9590

9691
# after lock is released we can send the payload
9792
utc_now = datetime.now().astimezone().isoformat()
@@ -122,19 +117,3 @@ def send_xp(self) -> None:
122117
error = e
123118
if error:
124119
logger.error(error)
125-
126-
def run(self) -> NoReturn:
127-
"""Run main thread.
128-
129-
Needs to be able to send XP at an interval.
130-
131-
:param self:
132-
:rtype: NoReturn
133-
"""
134-
while True:
135-
cur_time = 0
136-
while cur_time < self.interval:
137-
sleep(self.sleep_interval)
138-
cur_time += self.sleep_interval
139-
140-
self.send_xp()

0 commit comments

Comments
 (0)