115 lines
2.7 KiB
Markdown
115 lines
2.7 KiB
Markdown
# 并发数优化说明
|
||
|
||
## 并发数的含义
|
||
|
||
**并发数(Semaphore(3))** 是指:**单个账户扫描时,同时分析多少个交易对**
|
||
|
||
### 举例说明
|
||
|
||
假设扫描250个交易对,初步筛选后需要详细分析50个交易对:
|
||
|
||
**并发数3**:
|
||
- 同时最多分析3个交易对(获取K线、计算技术指标)
|
||
- 其他47个交易对排队等待
|
||
- 分析完3个后,继续分析下3个,以此类推
|
||
|
||
**并发数5**:
|
||
- 同时最多分析5个交易对
|
||
- 其他45个交易对排队等待
|
||
- 分析完5个后,继续分析下5个,以此类推
|
||
|
||
### 不是指用户进程数
|
||
|
||
- **用户进程数**:每个账户有1个进程(这是固定的)
|
||
- **并发数**:单个账户扫描时,同时分析多少个交易对(这是可以调整的)
|
||
|
||
---
|
||
|
||
## 为什么要降低并发数
|
||
|
||
### 多用户场景
|
||
|
||
如果4个账户同时扫描:
|
||
|
||
**并发数3**:
|
||
- 账户1:同时分析3个交易对
|
||
- 账户2:同时分析3个交易对
|
||
- 账户3:同时分析3个交易对
|
||
- 账户4:同时分析3个交易对
|
||
- **总共最多12个并发请求**
|
||
|
||
**并发数5**:
|
||
- 账户1:同时分析5个交易对
|
||
- 账户2:同时分析5个交易对
|
||
- 账户3:同时分析5个交易对
|
||
- 账户4:同时分析5个交易对
|
||
- **总共最多20个并发请求**
|
||
|
||
**结论**:降低并发数可以减少系统总压力
|
||
|
||
---
|
||
|
||
## 单用户场景
|
||
|
||
如果只有一个账户:
|
||
|
||
**并发数3**:
|
||
- 扫描耗时:约20-30秒(较慢)
|
||
|
||
**并发数5**:
|
||
- 扫描耗时:约15-25秒(较快)
|
||
|
||
**结论**:如果只有一个账户,保持并发数5可以提升扫描速度
|
||
|
||
---
|
||
|
||
## 建议
|
||
|
||
### 当前情况
|
||
|
||
如果你现在只有一个账户,建议:
|
||
|
||
1. **保持并发数5**:提升单个账户的扫描速度
|
||
2. **如果后续增加用户**:再降低到3,确保系统稳定
|
||
|
||
### 如何调整
|
||
|
||
**文件**:`trading_system/market_scanner.py`
|
||
|
||
**位置**:第107行
|
||
|
||
```python
|
||
# 当前(多用户优化)
|
||
semaphore = asyncio.Semaphore(3) # 最多3个并发请求
|
||
|
||
# 单用户建议
|
||
semaphore = asyncio.Semaphore(5) # 最多5个并发请求
|
||
```
|
||
|
||
---
|
||
|
||
## 性能对比
|
||
|
||
### 单用户场景
|
||
|
||
| 并发数 | 扫描耗时 | 系统压力 |
|
||
|--------|----------|----------|
|
||
| 3 | 20-30秒 | 低 |
|
||
| 5 | 15-25秒 | 低 |
|
||
|
||
### 多用户场景(4个账户)
|
||
|
||
| 并发数 | 总并发请求 | 系统压力 |
|
||
|--------|------------|----------|
|
||
| 3 | 最多12个 | 中等 |
|
||
| 5 | 最多20个 | 较高 |
|
||
|
||
---
|
||
|
||
## 总结
|
||
|
||
1. **并发数**:单个账户扫描时,同时分析多少个交易对
|
||
2. **不是用户进程数**:每个账户仍然只有1个进程
|
||
3. **单用户建议**:保持并发数5,提升扫描速度
|
||
4. **多用户建议**:降低到3,确保系统稳定
|