alibaba / alibaba/acm-sdk-python
重复创建_refresh_server_list线程任务
- 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