Skip to main content

纯Python实现的异步任务管理器,支持线程池和动态伸缩

Project description

FishAsyncTask

一个纯Python实现的异步任务管理器,支持线程池和动态伸缩。

GitHub License Python

目录

特性

  • 🚀 纯Python实现:无需额外依赖,使用标准库实现
  • 🔄 动态伸缩:根据任务队列大小自动调整工作线程数量
  • 📊 任务状态追踪:实时查询任务执行状态和结果
  • 🧹 自动清理:自动清理过期的任务状态记录
  • 🔒 线程安全:使用锁机制保证线程安全
  • 🎯 单例模式:支持多实例管理,不同业务模块可使用独立实例
  • ⏱️ 任务超时:支持配置任务执行超时时间
  • 🚦 队列控制:支持阻塞和非阻塞两种任务提交模式
  • 📈 性能监控:内置性能指标收集和健康状态监控
  • 🔄 任务优先级:支持优先级队列,高优先级任务优先执行
  • ⛓️ 任务依赖:支持任务依赖管理,自动处理任务执行顺序
  • 🚫 任务取消:支持协作式任务取消
  • 💾 资源管理:自动跟踪和清理任务相关资源,防止泄漏
  • ⚙️ 配置热重载:支持运行时配置动态更新

安装

从 PyPI 安装(推荐)

pip install fish-async-task

从 GitHub 安装

pip install git+https://github.com/fishzjp/FishAsyncTask.git

开发模式安装

git clone https://github.com/fishzjp/FishAsyncTask.git
cd FishAsyncTask
pip install -e ".[dev,performance]"
pre-commit install

开发依赖包括

  • pytestpytest-covpytest-benchmark - 测试框架
  • blackisort - 代码格式化
  • mypyinterrogate - 代码质量检查
  • locust - 负载测试
  • psutilredishueydramatiq - 性能测试依赖

📖 详细的安装说明请参考 安装文档

快速开始

基本使用

from fish_async_task import TaskManager
import time

# 创建任务管理器实例(单例模式)
task_manager = TaskManager()

# 定义一个任务函数
def my_task(name: str, value: int):
    print(f"执行任务: {name}, 值: {value}")
    time.sleep(1)  # 模拟耗时操作
    return f"任务完成: {name}"

# 提交任务(非阻塞模式)
task_id = task_manager.submit_task(my_task, "任务1", value=100)
print(f"任务ID: {task_id}")

# 等待任务完成并查询状态
while True:
    status = task_manager.get_task_status(task_id)
    if status:
        if status["status"] == "completed":
            print(f"任务完成,结果: {status.get('result')}")
            break
        elif status["status"] == "failed":
            print(f"任务失败: {status.get('error')}")
            break
    time.sleep(0.1)

# 关闭任务管理器
task_manager.shutdown()

阻塞模式提交任务

当队列已满时,可以使用阻塞模式等待队列有空间:

# 阻塞模式提交任务(等待队列有空间)
task_id = task_manager.submit_task(
    my_task, 
    "任务2", 
    value=200,
    block=True,        # 启用阻塞模式
    timeout=10.0      # 最多等待10秒
)

多实例管理

不同业务模块可以使用独立的任务管理器实例:

# 默认实例
default_manager = TaskManager()

# 订单模块的独立实例
order_manager = TaskManager(instance_key="order")

# 支付模块的独立实例
payment_manager = TaskManager(instance_key="payment")

文档

详细的文档请参考以下链接:

使用场景

  • 📦 后台任务处理:异步处理耗时操作,不阻塞主流程
  • 🔄 批量数据处理:并发处理大量数据,提高处理效率
  • 📧 消息队列:作为轻量级消息队列使用
  • 🎯 任务调度:配合定时任务实现任务调度
  • 🔌 API异步处理:Web API中异步处理请求

许可证

MIT License

贡献

欢迎提交Issue和Pull Request!

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

fish_async_task-0.2.3.tar.gz (99.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fish_async_task-0.2.3-py3-none-any.whl (36.7 kB view details)

Uploaded Python 3

File details

Details for the file fish_async_task-0.2.3.tar.gz.

File metadata

  • Download URL: fish_async_task-0.2.3.tar.gz
  • Upload date:
  • Size: 99.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.6

File hashes

Hashes for fish_async_task-0.2.3.tar.gz
Algorithm Hash digest
SHA256 7fe70e4154881c8819092aecf72a9f333ef621fb9a2d03c2739dcef143649b6e
MD5 a9934d59658dd256b93dbabded045ce0
BLAKE2b-256 ecee24006fe23f936d3460755a13e70a4d1c55b7ebc6d43db5fd1b766ee85ac4

See more details on using hashes here.

File details

Details for the file fish_async_task-0.2.3-py3-none-any.whl.

File metadata

File hashes

Hashes for fish_async_task-0.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 c683281ef914256cb7e6734851b0ebd453ff074875da01bd12bc6e2926096e2c
MD5 44ea0a2f173f4124fb7f0bc550d813b0
BLAKE2b-256 f459a44d3706295f2c5012a635159290149cd9978dbbfe7d2ea6f002ed1079f7

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page