自用多线程任务模块
Project description
Xiaobo Task 
简介
xiaobo-task 是一个通用的多线程 / 异步任务管理模块,面向需要批量执行任务、重试控制、回调处理与统计的场景。支持同步与异步两套接口,提供
retry、callback、代理池、任务统计等能力。
特性
- 同步
XiaoboTask与异步AsyncXiaoboTask双接口 - 支持批量提交、失败重试、回调处理(on_success/on_error/on_cancel)
- 内置代理池(支持 IPv4 / IPv6 / API 拉取)
- 任务执行统计与错误汇总
- 配置自动从
.env/ 环境变量加载(可在构造时覆盖)
安装
pip install xiaobo-task
Python >= 3.10
快速开始(同步)
import random
import time
from typing import Any
from loguru import logger
from xiaobo_task import XiaoboTask, Target, TaskFailed
APPNAME = "XiaoboTaskExample"
def example_task_processor(target: Target):
target.logger.info(f"开始处理任务,数据: {target.data}")
sleep_time = random.uniform(1, 3)
time.sleep(sleep_time)
# 抛出 TaskFailed 将不再重试
if target.data == "data-6":
raise TaskFailed("任务失败,不进行重试")
return f"{target.data} 处理完毕,耗时 {sleep_time:.2f} 秒"
def on_task_success(target: Target, result: Any):
target.logger.success(f"成功回调 -> {result}")
def on_task_error(target: Target, error: Exception):
target.logger.error(f"失败回调 -> {error}")
def main():
task_data_list = [f"data-{i}" for i in range(10)]
with XiaoboTask(APPNAME, shuffle=False) as task_manager:
task_manager.submit_tasks(
task_func=example_task_processor,
source=task_data_list,
on_success=on_task_success,
on_error=on_task_error,
retries=1,
)
task_manager.wait()
task_manager.statistics()
if __name__ == "__main__":
main()
异步示例
import asyncio
import random
from typing import Any
from loguru import logger
from xiaobo_task import Target, AsyncXiaoboTask, TaskFailed
APPNAME = "XiaoboTaskAsyncExample"
async def example_async_task_processor(target: Target):
target.logger.info(f"开始处理任务,数据: {target.data}")
await asyncio.sleep(random.uniform(1, 3))
if target.data == "data-6":
raise TaskFailed("任务失败,不进行重试")
return f"{target.data} 处理完毕"
def on_task_success(target: Target, result: Any):
target.logger.info(f"成功回调 -> {result}")
async def main():
async with AsyncXiaoboTask(APPNAME, shuffle=False, retries=1) as task_manager:
task_manager.submit_tasks(
task_func=example_async_task_processor,
source=[f"data-{i}" for i in range(10)],
on_success=on_task_success,
)
await task_manager.wait()
await task_manager.statistics()
if __name__ == "__main__":
asyncio.run(main())
运行示例
python examples/example.py
python examples/example_async.py
异步示例会读取 examples/example.txt 作为任务源。
从文件批量读取任务
支持通过 submit_tasks_from_file 直接读取文本文件批量提交:
task_manager.submit_tasks_from_file(
task_func=example_task_processor,
filename="example", # 自动补全 .txt
)
.env 配置项
配置默认从 .env / 环境变量加载,大小写不敏感,空字符串会自动回退到默认值。
布尔值支持多种格式:true/false、1/0、on/off、yes/no、y/n
按任务名匹配:SHUFFLE、USE_PROXY_IPV6、DISABLE_PROXY 支持 task1&task2 格式,仅对指定任务名生效。
可用配置项如下:
| 配置项 | 默认值 | 说明 |
|---|---|---|
MAX_WORKERS |
5 |
最大线程数 |
PROXY |
(空) | 代理,支持 host:port / user:pass@host:port,占位符 ***** 自动替换为 index 或第一位数据 |
PROXY_IPV6 |
(空) | IPv6 代理,格式同 PROXY |
PROXY_API |
(空) | 代理提取 API 地址(一行一个) |
PROXY_IPV6_API |
(空) | IPv6 代理提取 API 地址 |
RETRIES |
2 |
重试次数(抛出 TaskFailed 不重试) |
RETRY_DELAY |
0 |
重试延迟(秒) |
SHUFFLE |
false |
是否打乱任务顺序,按照数量运行的任务,支持布尔值或任务名称,多个任务用&拼接,如: task1&task2 |
USE_PROXY_IPV6 |
false |
是否优先使用 IPv6 代理,支持布尔值或任务名称,多个任务用&拼接,如: task1&task2 |
DISABLE_PROXY |
false |
是否禁用代理,支持布尔值或任务名称,多个任务用&拼接,如:task1&task2 |
示例 .env:
# 布尔值支持: true/false 1/0 on/off yes/no y/n
MAX_WORKERS=8
# 代理格式: host:port 或 user:pass@host:port,占位符 ***** 会自动替换
PROXY=abc.com:123
PROXY_IPV6=ipv6.abc.com:123
# 代理提取 API(一行一个)
PROXY_API=https://abc.com/proxies
PROXY_IPV6_API=https://abc.com/ipv6/proxies
RETRIES=2
RETRY_DELAY=0
# 布尔值 所有任务都打乱运行顺序
SHUFFLE=true
# 按任务名匹配示例: 仅 TaskA 使用IPV6代理
USE_PROXY_IPV6=task1
# 按任务名匹配示例: 仅 TaskA 和 TaskB 禁用代理
DISABLE_PROXY=TaskA&TaskB
也可以在初始化时通过关键字参数覆盖任意配置,例如
XiaoboTask(max_workers=10, retries=3)。
data 目录说明
读取 .txt 文件时会自动补全后缀,并按以下顺序查找:
- 脚本所在目录
project_root/ data/ example.txt - 项目根目录同级的
data/目录project_root/ example.txt main.py
依赖
核心依赖包括:curl-cffi、loguru、pydantic-settings、python-dotenv、tenacity。
许可证
暂无开源协议(No 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
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
File details
Details for the file xiaobo_task-1.0.7.tar.gz.
File metadata
- Download URL: xiaobo_task-1.0.7.tar.gz
- Upload date:
- Size: 18.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b1451ab9c8395915ea28dd459fa716ae759f70157eb68e15cc2a8a5ca2d37b74
|
|
| MD5 |
c6ba1d9ee65dcdd3e317f8423cbc6389
|
|
| BLAKE2b-256 |
3ca41ffc20e6eb736512bfa8c7a4c19eb18c5eddb87c17b642ffdefdd476e9bd
|
Provenance
The following attestation bundles were made for xiaobo_task-1.0.7.tar.gz:
Publisher:
workflow.yml on Xiaobooooo/xiaobo-task
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
xiaobo_task-1.0.7.tar.gz -
Subject digest:
b1451ab9c8395915ea28dd459fa716ae759f70157eb68e15cc2a8a5ca2d37b74 - Sigstore transparency entry: 942013427
- Sigstore integration time:
-
Permalink:
Xiaobooooo/xiaobo-task@c951065b67901a9176065234a084e52853cfe669 -
Branch / Tag:
refs/tags/1.0.7 - Owner: https://github.com/Xiaobooooo
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
workflow.yml@c951065b67901a9176065234a084e52853cfe669 -
Trigger Event:
push
-
Statement type:
File details
Details for the file xiaobo_task-1.0.7-py3-none-any.whl.
File metadata
- Download URL: xiaobo_task-1.0.7-py3-none-any.whl
- Upload date:
- Size: 19.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fff3fe0eb1848d211eba4de76cabb2010f9168322e294a3ed56f2499bc706e6c
|
|
| MD5 |
f2c0acc52467500a7638b2b55bfbebe1
|
|
| BLAKE2b-256 |
36bd355bc22ee73441b2071a7391c3effc6413ea845657da40fe8c5d21994d73
|
Provenance
The following attestation bundles were made for xiaobo_task-1.0.7-py3-none-any.whl:
Publisher:
workflow.yml on Xiaobooooo/xiaobo-task
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
xiaobo_task-1.0.7-py3-none-any.whl -
Subject digest:
fff3fe0eb1848d211eba4de76cabb2010f9168322e294a3ed56f2499bc706e6c - Sigstore transparency entry: 942013435
- Sigstore integration time:
-
Permalink:
Xiaobooooo/xiaobo-task@c951065b67901a9176065234a084e52853cfe669 -
Branch / Tag:
refs/tags/1.0.7 - Owner: https://github.com/Xiaobooooo
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
workflow.yml@c951065b67901a9176065234a084e52853cfe669 -
Trigger Event:
push
-
Statement type: