High-level async API client and scheduler framework
Project description
zf_rush - 高性能异步 API 客户端框架
一个专注于高性能、易扩展的异步 API 客户端和任务调度框架。
特性
- ✨ 全异步架构:基于 Python 3.12+ 的现代异步特性
- 🚀 装饰器驱动:通过装饰器优雅地实现并发控制、重试策略、延迟执行等功能
- 🌐 智能代理:内置多种代理提供方式,支持动态切换和失效处理
- 📝 日志系统:集成 loguru,提供美观的控制台输出和文件日志
- 🔄 任务调度:支持定时执行和并发控制
- 🛡️ 异常处理:完善的错误处理和重试机制
安装
要求 Python 3.12 或更高版本。
pip install zf_rush
# 或使用 uv(推荐)
uv add zf_rush
快速开始
基础示例
import asyncio
from loguru import logger
from zf_rush.async_decorators import concurrent, http_client
from zf_rush.client import HttpClient
from zf_rush.config import ConnectionConfig, RetryStrategy
from zf_rush.proxy import DebugProxyProvider
# 配置连接和重试策略
connection_config = ConnectionConfig(timeout=15.0, http2=True)
retry_strategy = RetryStrategy(max_retries=5)
proxy_provider = DebugProxyProvider("http://your-proxy:port/")
@concurrent(max_concurrent=2, max_requests=8) # 控制并发和请求数
@http_client(
connection_config=connection_config,
retry_strategy=retry_strategy,
proxy_provider=proxy_provider,
)
async def api_call(client: HttpClient, task_id: int, request_num: int):
response = await client.request("GET", "https://api.example.com/")
logger.info(f"TaskId-{task_id:02d} | Request-{request_num + 1:03d} | Response: {response.text[:50]}")
# 运行任务
async def main():
await api_call()
if __name__ == "__main__":
if sys.platform == "win32":
asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
asyncio.run(main())
日志配置
from loguru import logger
import sys
# 配置控制台日志
logger.remove() # 移除默认处理器
logger.add(
sys.stdout,
level="INFO",
format="<green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green> | "
"<level>{level: <4.4}</level> | "
"<level>{message}</level>",
enqueue=True,
colorize=False,
)
# 配置文件日志
logger.add(
"logs/app_{time:YYYY-MM-DD}.log",
format="<green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green> | "
"<level>{level: <4.4}</level> | "
"<level>{message}</level>",
rotation="00:00", # 每天轮换
compression="zip", # 压缩旧日志
level="INFO",
enqueue=True,
backtrace=True,
diagnose=True,
)
高级用法:多重装饰器组合
from zf_rush.async_decorators import concurrent, scheduled, delayed
from datetime import datetime
# 组合多个装饰器实现复杂功能
@scheduled(execute_time="2025-03-22 18:50:00") # 定时执行
@concurrent(max_concurrent=2, max_requests=10) # 并发控制
@delayed(delay=0.5) # 请求延迟
async def complex_task(task_id: int, request_num: int):
# 任务实现
pass
# 使用配置对象创建装饰器
from zf_rush.config import AppConfig
config = AppConfig(
execute_time="2024-01-01 12:00:00",
concurrency=5,
max_requests=20,
request_delay=0.5,
retry_attempts=3,
)
def create_scheduler(config: AppConfig):
def decorator(func):
@scheduled(config.execute_time)
@concurrent(config.concurrency, config.max_requests)
@delayed(config.request_delay)
async def wrapper(*args, **kwargs):
return await func(*args, **kwargs)
return wrapper
return decorator
@create_scheduler(config)
async def configured_task(task_id: int, request_num: int):
# 任务实现
pass
代理配置示例
from zf_rush.proxy import DebugProxyProvider, RotatingProxyProvider, YiProxyProvider
# 调试代理
debug_proxy = DebugProxyProvider("http://debug-proxy:8080/")
# 轮转代理
rotating_proxy = RotatingProxyProvider([
"http://proxy1:8080",
"http://proxy2:8080"
])
# 易代理
yi_proxy = YiProxyProvider(
"http://api.ydaili.cn/api?key=your_key"
)
核心组件
装饰器
@concurrent: 控制并发数和最大请求数@http_client: 配置 HTTP 客户端(代理、重试、超时等)@scheduled: 定时执行任务@delayed: 添加请求延迟
配置类
ConnectionConfig: HTTP 连接配置RetryStrategy: 重试策略配置AppConfig: 应用全局配置
代理提供者
DebugProxyProvider: 用于调试的固定代理RotatingProxyProvider: 轮转多个代理YiProxyProvider: 易代理平台集成ProxyProvider: 自定义代理提供者的基类
项目依赖
- Python >= 3.12
- httpx[http2] >= 0.28.1
- fake-useragent >= 2.1.0
- loguru >= 0.7.3
最佳实践
-
错误处理
- 使用 try-except 捕获具体异常
- 实现合理的重试策略
- 记录详细的错误日志
-
性能优化
- 合理设置并发数和请求延迟
- 使用 HTTP/2 提升性能
- 启用代理池分散请求压力
-
日志管理
- 配置合适的日志级别
- 启用日志轮换和压缩
- 记录关键性能指标
许可证
本项目采用 MIT 许可证。详见 LICENSE 文件。
链接
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
zf_rush-1.0.0.tar.gz
(12.9 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
zf_rush-1.0.0-py3-none-any.whl
(12.5 kB
view details)
File details
Details for the file zf_rush-1.0.0.tar.gz.
File metadata
- Download URL: zf_rush-1.0.0.tar.gz
- Upload date:
- Size: 12.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
00964619cfafd4e2ee0a6da4e3b91e22aa81c5ea5049dbe45e161439399bb509
|
|
| MD5 |
7cf6aee830d958640abe8e68f6f77f46
|
|
| BLAKE2b-256 |
91a804c759008ef60838888f52b98964d2aec7d27529a07de21100c9e9c5e9b5
|
File details
Details for the file zf_rush-1.0.0-py3-none-any.whl.
File metadata
- Download URL: zf_rush-1.0.0-py3-none-any.whl
- Upload date:
- Size: 12.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b46b7e4bc336f38d1438a29a0bb5438acc7597883830bc0b4bbf475144bedf4d
|
|
| MD5 |
94bac10a70d74a7095ddd5a4d5c13dc3
|
|
| BLAKE2b-256 |
875ceb90014f311bd1cb80dfe721ec53f4f548d9af59e5c92ea88a05c7728a1c
|