alibaba / alibaba/acm-sdk-python
重复创建_refresh_server_list线程任务
- Lenguaje dominante
- Python
- Estrellas
- 59
- Forks
- 26
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Descripción
## 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='')
```
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Línea de trabajo
Comienza en ACMClient.get() y en el punto de entrada get_server() mostrado en el issue; después, sigue el rastro de dónde se inicia _refresh_server_list. Se considera terminado cuando las llamadas repetidas no crean más de un hilo de actualización para el cliente; como no se especifica ningún archivo de pruebas, añade o ejecuta las comprobaciones relevantes del comportamiento del cliente, si están disponibles.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- python
- Área
- backend
- Tipo de issue
- Error
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Estado de actividad
- Estancado
- Claridad
- Bien especificado
- Aptitud para principiantes
- 35/100