sycommon-python-lib 0.1.22__tar.gz → 0.1.23__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of sycommon-python-lib might be problematic. Click here for more details.

Files changed (59) hide show
  1. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/PKG-INFO +1 -1
  2. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/pyproject.toml +1 -1
  3. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon/synacos/nacos_service.py +63 -48
  4. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon_python_lib.egg-info/PKG-INFO +1 -1
  5. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/README.md +0 -0
  6. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/setup.cfg +0 -0
  7. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/command/cli.py +0 -0
  8. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon/__init__.py +0 -0
  9. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon/config/Config.py +0 -0
  10. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon/config/DatabaseConfig.py +0 -0
  11. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon/config/EmbeddingConfig.py +0 -0
  12. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon/config/LLMConfig.py +0 -0
  13. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon/config/MQConfig.py +0 -0
  14. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon/config/RerankerConfig.py +0 -0
  15. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon/config/__init__.py +0 -0
  16. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon/database/base_db_service.py +0 -0
  17. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon/database/database_service.py +0 -0
  18. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon/health/__init__.py +0 -0
  19. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon/health/health_check.py +0 -0
  20. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon/health/metrics.py +0 -0
  21. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon/health/ping.py +0 -0
  22. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon/logging/__init__.py +0 -0
  23. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon/logging/kafka_log.py +0 -0
  24. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon/logging/logger_wrapper.py +0 -0
  25. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon/middleware/__init__.py +0 -0
  26. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon/middleware/context.py +0 -0
  27. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon/middleware/cors.py +0 -0
  28. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon/middleware/docs.py +0 -0
  29. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon/middleware/exception.py +0 -0
  30. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon/middleware/middleware.py +0 -0
  31. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon/middleware/monitor_memory.py +0 -0
  32. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon/middleware/mq.py +0 -0
  33. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon/middleware/timeout.py +0 -0
  34. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon/middleware/traceid.py +0 -0
  35. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon/models/__init__.py +0 -0
  36. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon/models/base_http.py +0 -0
  37. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon/models/log.py +0 -0
  38. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon/models/mqlistener_config.py +0 -0
  39. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon/models/mqmsg_model.py +0 -0
  40. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon/models/mqsend_config.py +0 -0
  41. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon/models/sso_user.py +0 -0
  42. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon/rabbitmq/rabbitmq_client.py +0 -0
  43. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon/rabbitmq/rabbitmq_pool.py +0 -0
  44. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon/rabbitmq/rabbitmq_service.py +0 -0
  45. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon/services.py +0 -0
  46. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon/sse/__init__.py +0 -0
  47. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon/sse/event.py +0 -0
  48. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon/sse/sse.py +0 -0
  49. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon/synacos/__init__.py +0 -0
  50. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon/synacos/feign.py +0 -0
  51. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon/tools/__init__.py +0 -0
  52. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon/tools/docs.py +0 -0
  53. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon/tools/snowflake.py +0 -0
  54. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon/tools/timing.py +0 -0
  55. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon_python_lib.egg-info/SOURCES.txt +0 -0
  56. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon_python_lib.egg-info/dependency_links.txt +0 -0
  57. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon_python_lib.egg-info/entry_points.txt +0 -0
  58. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon_python_lib.egg-info/requires.txt +0 -0
  59. {sycommon_python_lib-0.1.22 → sycommon_python_lib-0.1.23}/src/sycommon_python_lib.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sycommon-python-lib
3
- Version: 0.1.22
3
+ Version: 0.1.23
4
4
  Summary: Add your description here
5
5
  Requires-Python: >=3.10
6
6
  Description-Content-Type: text/markdown
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "sycommon-python-lib"
3
- version = "0.1.22"
3
+ version = "0.1.23"
4
4
  description = "Add your description here"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -47,7 +47,7 @@ class NacosService(metaclass=SingletonMeta):
47
47
  self.retry_backoff = self.nacos_config.get('retryBackoff', 1.5)
48
48
  self.max_retry_delay = self.nacos_config.get('maxRetryDelay', 30)
49
49
  self.heartbeat_interval = self.nacos_config.get(
50
- 'heartbeatInterval', 5)
50
+ 'heartbeatInterval', 10)
51
51
  self.register_retry_interval = self.nacos_config.get(
52
52
  'registerRetryInterval', 5) # 注册重试间隔
53
53
 
@@ -87,7 +87,9 @@ class NacosService(metaclass=SingletonMeta):
87
87
  # 心跳相关
88
88
  self._last_heartbeat_time = 0
89
89
  self._heartbeat_fail_count = 0
90
+ self._heartbeat_lock = threading.Lock() # 控制心跳线程创建的锁
90
91
  self._heartbeat_thread = None
92
+
91
93
  self.max_heartbeat_timeout = self.nacos_config.get(
92
94
  'maxHeartbeatTimeout', 30) # 最大无心跳时间(秒)
93
95
  self._last_successful_heartbeat = time.time() # 上次成功心跳时间戳
@@ -367,9 +369,9 @@ class NacosService(metaclass=SingletonMeta):
367
369
 
368
370
  metadata = {
369
371
  "ignore-metrics": "true",
370
- "preserved.heart.beat.interval": "3000", # 心跳间隔 3 秒
371
- "preserved.heart.beat.timeout": "15000", # 心跳超时 15 秒
372
- "preserved.ip.delete.timeout": "30000" # 实例删除超时 30 秒
372
+ # "preserved.heart.beat.interval": "3000", # 心跳间隔 3 秒
373
+ # "preserved.heart.beat.timeout": "15000", # 心跳超时 15 秒
374
+ # "preserved.ip.delete.timeout": "30000" # 实例删除超时 30 秒
373
375
  }
374
376
  if self.version:
375
377
  metadata["version"] = self.version
@@ -460,68 +462,81 @@ class NacosService(metaclass=SingletonMeta):
460
462
  return instance
461
463
 
462
464
  def start_heartbeat(self):
463
- """启动心跳线程"""
464
- if self._heartbeat_thread and self._heartbeat_thread.is_alive():
465
- return
465
+ """启动心跳线程(确保单例)"""
466
+ with self._heartbeat_lock: # 加锁确保线程安全
467
+ # 双重检查:先判断线程是否已存在且存活
468
+ if self._heartbeat_thread is not None and self._heartbeat_thread.is_alive():
469
+ return
466
470
 
467
- self._heartbeat_thread = threading.Thread(
468
- target=self._send_heartbeat_loop,
469
- name="NacosHeartbeatThread",
470
- daemon=True
471
- )
472
- # 设置线程为守护线程并尝试提高优先级
473
- self._heartbeat_thread.daemon = True
474
- self._heartbeat_thread.start()
471
+ # 彻底清理可能的残留线程引用
472
+ self._heartbeat_thread = None
475
473
 
476
- try:
477
- # 尝试提高线程优先级
478
- if hasattr(os, 'sched_setscheduler'):
479
- os.sched_setscheduler(
480
- self._heartbeat_thread.ident, os.SCHED_FIFO, os.sched_param(99))
481
- elif hasattr(os, 'nice'):
482
- os.nice(-10) # 在Unix系统上尝试提高优先级
483
- SYLogger.info("nacos:心跳线程已启动并尝试提高优先级")
484
- except Exception as e:
485
- SYLogger.warning(f"nacos:无法提高心跳线程优先级: {e}")
474
+ # 创建新的心跳线程
475
+ self._heartbeat_thread = threading.Thread(
476
+ target=self._send_heartbeat_loop,
477
+ name="NacosHeartbeatThread",
478
+ daemon=True
479
+ )
480
+ self._heartbeat_thread.daemon = True
481
+ self._heartbeat_thread.start()
482
+ SYLogger.info(f"nacos:心跳线程启动,线程ID: {self._heartbeat_thread.ident}")
486
483
 
487
484
  def _send_heartbeat_loop(self):
488
485
  """优化后的心跳发送循环,确保严格按间隔执行"""
489
- SYLogger.info("nacos:优化版心跳线程开始运行")
490
- last_heartbeat_time = time.time() # 初始时间戳
486
+ current_thread = threading.current_thread()
487
+ thread_ident = current_thread.ident
488
+ SYLogger.info(
489
+ f"nacos:心跳循环启动 - 线程ID: {thread_ident}, "
490
+ f"配置间隔: {self.heartbeat_interval}秒"
491
+ )
492
+
493
+ consecutive_fail = 0 # 连续失败计数器
491
494
 
492
495
  while not self._shutdown_event.is_set():
496
+ # 记录当前时间,作为本次心跳的基准
493
497
  current_time = time.time()
494
- # 计算距离下次心跳的时间(确保严格按间隔执行)
495
- sleep_time = max(0, self.heartbeat_interval -
496
- (current_time - last_heartbeat_time))
497
-
498
- if sleep_time > 0:
499
- self._shutdown_event.wait(sleep_time) # 精准等待
500
498
 
501
- # 执行心跳逻辑
502
499
  try:
503
- # 带锁检查注册状态
500
+ # 检查注册状态(带锁读取)
504
501
  with self._state_lock:
505
502
  registered_status = self.registered
506
503
 
507
- if registered_status and self.check_service_registered():
504
+ if not registered_status:
505
+ SYLogger.warning(
506
+ f"nacos:服务未注册,跳过心跳 - 线程ID: {thread_ident}")
507
+ consecutive_fail = 0
508
+ else:
509
+ # 发送心跳
508
510
  success = self.send_heartbeat()
509
511
  if success:
510
- self._last_successful_heartbeat = time.time()
512
+ consecutive_fail = 0
513
+ self._last_successful_heartbeat = current_time
511
514
  SYLogger.info(
512
- f"nacos:心跳发送成功,时间: {self._last_successful_heartbeat:.3f}")
515
+ f"nacos:心跳发送成功 - 时间: {current_time:.3f}, "
516
+ f"间隔: {self.heartbeat_interval}秒"
517
+ )
513
518
  else:
519
+ consecutive_fail += 1
514
520
  SYLogger.warning(
515
- f"nacos:心跳发送失败,已持续{current_time - self._last_successful_heartbeat:.1f}")
516
- else:
517
- SYLogger.warning("nacos:服务未注册,尝试重新注册")
518
- # 检查线程池是否已关闭
519
- if not self._executor._shutdown:
520
- self._executor.submit(self.register_with_retry)
521
- else:
522
- SYLogger.warning("nacos:线程池已关闭,无法提交注册任务")
523
- finally:
524
- last_heartbeat_time = time.time() # 更新上次执行时间
521
+ f"nacos:心跳发送失败 - 连续失败: {consecutive_fail}"
522
+ )
523
+ if consecutive_fail >= 5:
524
+ SYLogger.error("nacos:心跳连续失败5次,尝试重连")
525
+ self.reconnect_nacos_client()
526
+ consecutive_fail = 0
527
+
528
+ except Exception as e:
529
+ consecutive_fail += 1
530
+ SYLogger.error(
531
+ f"nacos:心跳异常: {str(e)}, 连续失败: {consecutive_fail}次")
532
+
533
+ # 计算下次执行时间(当前时间 + 配置间隔),确保间隔稳定
534
+ next_run_time = current_time + self.heartbeat_interval
535
+ sleep_time = max(0, next_run_time - time.time()
536
+ ) # 避免负数(处理耗时超过间隔的情况)
537
+ self._shutdown_event.wait(sleep_time) # 精准休眠至下次执行时间
538
+
539
+ SYLogger.info(f"nacos:心跳循环已停止 - 线程ID: {thread_ident}")
525
540
 
526
541
  def send_heartbeat(self):
527
542
  """发送心跳并添加超时控制"""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sycommon-python-lib
3
- Version: 0.1.22
3
+ Version: 0.1.23
4
4
  Summary: Add your description here
5
5
  Requires-Python: >=3.10
6
6
  Description-Content-Type: text/markdown