alibaba / alibaba/acm-sdk-python

重复创建_refresh_server_list线程任务

Aperta
#22 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub
Lingua principale
Python
Stelle
59
Fork
26
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Descrizione

## 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='')

```

Guida per i contributori

Nessuna guida per i contributori indicizzata per questo repository

Direzione di ricerca

Inizia da ACMClient.get() e dal punto di ingresso get_server() mostrato nell’issue, quindi traccia dove viene avviato _refresh_server_list. Il lavoro è completato quando chiamate ripetute non creano più di un thread di aggiornamento per il client; non è indicato alcun file di test, quindi aggiungi o esegui i controlli pertinenti del comportamento del client, se disponibili.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
python
Ambito
backend
Tipo di issue
Bug
Difficoltà
2/5
Tempo stimato
1-3 ore
Stato di attività
Ferma
Chiarezza
Specificata chiaramente
Idoneità per principianti
35/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.