alibaba / alibaba/acm-sdk-python

重复创建_refresh_server_list线程任务

Offen
#22 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
Vorherrschende Sprache
Python
Sterne
59
Forks
26
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

## bug描述
每次调用`ACMClient().get()`方法都创建`_refresh_server_list`线程任务
## 解决建议
`ACMClient`类中添加一个属性用于标识是否创建过`_refresh_server_list`线程任务,判断`self._is_server_list_task_created`决定是否创建`_refresh_server_list`线程任务,首次创建后将`self._is_server_list_task_created`修改为`True`。
```
from threading import Thread

import acm
from acm.client import logger
from acm.server import get_server_list

class ACMClient(acm.ACMClient):

def __init__(self, endpoint, namespace=None, ak=None, sk=None, ram_role_name=None, unit_name=None):
super().__init__(endpoint, namespace=None, ak=None, sk=None, ram_role_name=None, unit_name=None)
self._is_server_list_task_created = False

def get_server(self):
if self.server_list is None:
with self.server_list_lock:
logger.info("[get-server] server list is null, try to initialize")
server_list = get_server_list(self.endpoint, 443 if self.tls_enabled else 8080, self.cai_enabled,
self.unit_name)
if not server_list:
logger.error("[get-server] empty server_list get from %s" % self.endpoint)
return None
self.server_list = server_list
self.current_server = self.server_list[self.server_offset]
logger.info("[get-server] server_num:%s server_list:%s" % (len(self.server_list), self.server_list))

if self.cai_enabled and not self._is_server_list_task_created:
self._is_server_list_task_created = True
t = Thread(target=self._refresh_server_list)
t.setDaemon(True)
t.start()

logger.info("[get-server] use server:%s" % str(self.current_server))
return self.current_server

if __name__ == '__main__':
client = ACMClient(endpoint='')
config = client.get(data_id='', group='')

```

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Rechercherichtung

Beginne bei ACMClient.get() und dem im Issue gezeigten get_server()-Einstiegspunkt und verfolge anschließend, wo _refresh_server_list gestartet wird. Als erledigt gilt die Aufgabe, wenn wiederholte Aufrufe nicht mehr als einen Refresh-Thread für den Client erzeugen; da keine Testdatei genannt ist, füge die relevanten Prüfungen des Client-Verhaltens hinzu oder führe sie aus, falls verfügbar.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
backend
Issue-Typ
Bug
Schwierigkeit
2/5
Geschätzter Aufwand
1-3 Stunden
Aktivitätsstatus
Veraltet
Klarheit
Klar beschrieben
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.