qka 2.3.1.dev2__tar.gz → 2.3.2__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.
Files changed (31) hide show
  1. {qka-2.3.1.dev2 → qka-2.3.2}/PKG-INFO +1 -1
  2. {qka-2.3.1.dev2 → qka-2.3.2}/qka/core/data.py +14 -2
  3. {qka-2.3.1.dev2 → qka-2.3.2}/.github/workflows/release.yml +0 -0
  4. {qka-2.3.1.dev2 → qka-2.3.2}/.gitignore +0 -0
  5. {qka-2.3.1.dev2 → qka-2.3.2}/.vscode/settings.json +0 -0
  6. {qka-2.3.1.dev2 → qka-2.3.2}/CHANGELOG.md +0 -0
  7. {qka-2.3.1.dev2 → qka-2.3.2}/LICENSE +0 -0
  8. {qka-2.3.1.dev2 → qka-2.3.2}/README.md +0 -0
  9. {qka-2.3.1.dev2 → qka-2.3.2}/pyproject.toml +0 -0
  10. {qka-2.3.1.dev2 → qka-2.3.2}/qka/__init__.py +0 -0
  11. {qka-2.3.1.dev2 → qka-2.3.2}/qka/cli.py +0 -0
  12. {qka-2.3.1.dev2 → qka-2.3.2}/qka/core/__init__.py +0 -0
  13. {qka-2.3.1.dev2 → qka-2.3.2}/qka/core/accessor.py +0 -0
  14. {qka-2.3.1.dev2 → qka-2.3.2}/qka/core/analysis.py +0 -0
  15. {qka-2.3.1.dev2 → qka-2.3.2}/qka/core/backtest.py +0 -0
  16. {qka-2.3.1.dev2 → qka-2.3.2}/qka/core/broker.py +0 -0
  17. {qka-2.3.1.dev2 → qka-2.3.2}/qka/core/indicator.py +0 -0
  18. {qka-2.3.1.dev2 → qka-2.3.2}/qka/core/report.py +0 -0
  19. {qka-2.3.1.dev2 → qka-2.3.2}/qka/core/simulate.py +0 -0
  20. {qka-2.3.1.dev2 → qka-2.3.2}/qka/core/sizing.py +0 -0
  21. {qka-2.3.1.dev2 → qka-2.3.2}/qka/core/strategy.py +0 -0
  22. {qka-2.3.1.dev2 → qka-2.3.2}/qka/utils/__init__.py +0 -0
  23. {qka-2.3.1.dev2 → qka-2.3.2}/qka/utils/logger.py +0 -0
  24. {qka-2.3.1.dev2 → qka-2.3.2}/skills/qka/SKILL.md +0 -0
  25. {qka-2.3.1.dev2 → qka-2.3.2}/skills/qka/references/analysis.md +0 -0
  26. {qka-2.3.1.dev2 → qka-2.3.2}/skills/qka/references/backtest.md +0 -0
  27. {qka-2.3.1.dev2 → qka-2.3.2}/skills/qka/references/broker.md +0 -0
  28. {qka-2.3.1.dev2 → qka-2.3.2}/skills/qka/references/data.md +0 -0
  29. {qka-2.3.1.dev2 → qka-2.3.2}/skills/qka/references/sizing.md +0 -0
  30. {qka-2.3.1.dev2 → qka-2.3.2}/skills/qka/references/strategy.md +0 -0
  31. {qka-2.3.1.dev2 → qka-2.3.2}/tools/generate_api_ref.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: qka
3
- Version: 2.3.1.dev2
3
+ Version: 2.3.2
4
4
  Summary: QKA(快量化 / Quant Kit for A-shares)- 简洁易用的 A 股量化回测框架
5
5
  Project-URL: Home, https://github.com/zsrl/qka
6
6
  Project-URL: Repository, https://github.com/zsrl/qka
@@ -4,7 +4,10 @@ QKA数据模块
4
4
  提供统一的数据获取、缓存和管理功能,支持多数据源、多周期、多因子的数据获取。
5
5
  """
6
6
 
7
+ import contextlib
8
+ import io
7
9
  import os
10
+ import threading
8
11
  from pathlib import Path
9
12
  from tqdm import tqdm
10
13
  from concurrent.futures import ThreadPoolExecutor, as_completed
@@ -1108,13 +1111,22 @@ class Data():
1108
1111
  # ── TickFlow 数据源 ────────────────────────────────────────
1109
1112
 
1110
1113
  _tf_client = None # 进程级复用,避免重复初始化
1114
+ _tf_client_lock = threading.Lock()
1111
1115
 
1112
1116
  @classmethod
1113
1117
  def _tickflow_client(cls):
1114
1118
  """惰性创建并复用 TickFlow 客户端(当前走免费服务,无需 api_key)。"""
1115
1119
  if cls._tf_client is None:
1116
- from tickflow import TickFlow
1117
- cls._tf_client = TickFlow.free()
1120
+ with cls._tf_client_lock:
1121
+ if cls._tf_client is None:
1122
+ from tickflow import TickFlow
1123
+ # TickFlow.free() 会往 stdout 打一段带 emoji 的「免费档」说明。
1124
+ # stdout 被重定向到文件、且编码非 UTF-8 时(如打包版把后端输出
1125
+ # 写入 GBK 日志),print emoji 会抛 UnicodeEncodeError 而中断下载,
1126
+ # 故创建期间丢弃其标准输出。(redirect_stdout 改的是全局 sys.stdout,
1127
+ # 并发首次创建会互相覆盖,故用锁串行化。)
1128
+ with contextlib.redirect_stdout(io.StringIO()):
1129
+ cls._tf_client = TickFlow.free()
1118
1130
  return cls._tf_client
1119
1131
 
1120
1132
  @staticmethod
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes