Python库的多样性使得它们可以在不同的应用场景中发挥作用,不同场景下同一个库可能拥有不同的功能,本系列未来会有不同的分类,可能会出现相同的库。数量很多,慢慢整理。文中的示例都是最基础的用法,有些就顺手写了,有些就丢给Ai,看个乐就行。
1. python-multipart – 文件和表单处理
功能: 用于处理 HTTP multipart/form-data 请求,支持文件上传和表单数据解析。
使用场景:
- 处理文件上传的 Web 应用。
- 与 Flask、Django 等框架集成处理表单数据。
- 需要解析多部分请求的任何 HTTP 服务。
示例:
from werkzeug.datastructures import FileStorage from werkzeug.formparser import parse_form_data # 示例请求对象 class Request: def __init__(self, stream, content_type): self.stream = stream self.content_type = content_type # 创建一个模拟的请求对象 request = Request(b'--boundary\r\nContent-Disposition: form-data; name="file"; filename="test.txt"\r\n\r\nHello, World!\r\n--boundary--', 'multipart/form-data; boundary=boundary') data, files = parse_form_data(request, stream_factory=FileStorage) # 处理文件 for key, file in files.items(): print(f"File name: {file.filename}") print(f"File content: {file.read().decode('utf-8')}")
2. aiofiles – 异步文件操作支持
功能: 为异步编程提供文件 I/O 支持,用于与 asyncio 兼容的文件操作。
使用场景:
- 需要异步文件读写的高并发应用。
- 与异步框架如 FastAPI、AIOHTTP 集成。
- 提高 I/O 密集型任务的性能。
示例:
import asyncio import aiofiles async def main(): async with aiofiles.open('example.txt', mode='w') as f: await f.write('Hello, World!') async with aiofiles.open('example.txt', mode='r') as f: content = await f.read() print(content) asyncio.run(main())
3. gridfs – MongoDB 的文件存储系统
功能: GridFS 是 MongoDB 的一部分,用于存储和检索大文件。
使用场景:
- 需要在 MongoDB 中存储大文件(>16MB)的应用。
- 构建内容管理系统或文件服务。
- 需要高效、可扩展文件存储的项目。
示例:
from pymongo import MongoClient from gridfs import GridFS # 连接到 MongoDB client = MongoClient('localhost', 27017) db = client.test_database fs = GridFS(db) # 写入文件 with open('example.txt', 'rb') as f: content = f.read() fs.put(content, filename="example.txt") # 读取文件 file = fs.find_one({"filename": "example.txt"}) with open('downloaded_example.txt', 'wb') as f: f.write(file.read())
4. Celery – 分布式任务队列
功能: Celery 是一个异步任务队列/作业队列,基于分布式消息传递。
使用场景:
- 处理后台任务、定时任务。
- 分布式任务处理和负载均衡。
- 与 Django、Flask 等 Web 框架集成。
示例:
from celery import Celery app = Celery('tasks', broker='pyamqp://guest@localhost//') @app.task def add(x, y): return x + y # 运行 Celery 工作进程 # celery -A tasks worker --loglevel=info
5. Dramatiq – 高性能任务队列
功能: Dramatiq 是一个快速、可靠的任务处理库,支持分布式处理。
使用场景:
- 需要高性能任务队列的应用。
- 微服务架构中的任务处理。
- 需要任务优先级和重试机制的项目。
示例:
from dramatiq import GenericActor class ExampleActor(GenericActor): def perform(self, x, y): print(f"Adding {x} + {y}") return x + y # 在主程序中 from dramatiq.brokers.rabbitmq import RabbitmqBroker from dramatiq.results import Results from dramatiq.results.backends import RedisBackend broker = RabbitmqBroker() broker.add_middleware(Results(backend=RedisBackend())) # 发送任务到队列 ExampleActor.send(1, 2)
6. RQ (Redis Queue) – 基于 Redis 的简单任务队列
功能: RQ 是一个简单、轻量级的任务队列,依赖于 Redis。
使用场景:
- 需要快速设置任务队列的项目。
- 简单任务处理和调度。
- 与 Python Web 框架集成。
示例:
from redis import Redis from rq import Queue # 连接到 Redis redis_conn = Redis() q = Queue(connection=redis_conn) # 定义任务 def example_task(x, y): return x + y # 将任务加入队列 job = q.enqueue(example_task, 2, 3)
7. Huey – 小型任务队列框架
功能: Huey 是一个轻量级的任务队列,支持多种后端存储。
使用场景:
- 需要一个简单、易用的任务队列。
- 适用于小型项目或原型开发。
- 与 Django 集成。
示例:
from huey import RedisHuey huey = RedisHuey('my_app') @huey.task() def add(x, y): return x + y # 使用任务 result = add(1, 2) print(result.get()) # 等待任务完成并获取结果
8. APScheduler – 调度和执行定时任务
功能: APScheduler 是一个 Python 库,用于调度任务,支持多种调度方式。
使用场景:
- 定时执行任务。
- 需要复杂调度逻辑的应用。
- 与 Web 框架集成以实现定时作业。
示例:
from apscheduler.schedulers.background import BackgroundScheduler def job(): print("Scheduled job executed!") scheduler = BackgroundScheduler() scheduler.add_job(job, 'interval', seconds=5) scheduler.start() # 保持程序运行 try: while True: pass except (KeyboardInterrupt, SystemExit): scheduler.shutdown()
9. Werkzeug – WSGI 工具和调试器
功能: Werkzeug 提供了 WSGI 工具集和一个强大的调试器,常用于 Web 框架的底层。
使用场景:
- 构建自定义 WSGI 中间件。
- 开发需要 WSGI 支持的 Web 应用。
- 与 Flask 等框架集成。
示例:
from werkzeug.wrappers import Request, Response @Request.application def application(request): return Response('Hello, World!') if __name__ == '__main__': from werkzeug.serving import run_simple run_simple('localhost', 5000, application)
10. pytest – 强大的测试框架
功能: pytest 是一个功能强大的测试框架,支持参数化、插件和复杂的测试结构。
使用场景:
- 编写和运行单元测试、集成测试。
- 需要灵活、可扩展的测试框架。
- 与其他测试工具和框架集成。
示例:
# test_example.py def inc(x): return x + 1 def test_inc(): assert inc(3) == 4 # 运行测试 # pytest test_example.py