本文目录导读:

Python中汇总任务结果的方法有很多,具体取决于你的使用场景,以下是最常见、最实用的几种方案,从简单到复杂:
基础列表汇总(最常用)
适合简单的任务结果收集:
# 多个函数返回结果
def task1():
return 10
def task2():
return 20
def task3():
return 30
# 方法1:直接收集
results = [task1(), task2(), task3()]
print(f"直收集结果: {results}")
# 方法2:动态添加
dynamic_results = []
for i in range(5):
result = i * 2 # 模拟任务结果
dynamic_results.append(result)
print(f"动态收集结果: {dynamic_results}")
# 方法3:字典存储(带任务名称)
task_dict = {
'task1': task1(),
'task2': task2(),
'task3': task3()
}
print(f"字典存储: {task_dict}")
多线程/多进程任务汇总
处理耗时任务时的结果收集:
import concurrent.futures
import time
# 模拟耗时任务
def heavy_task(n):
time.sleep(n)
return f"任务{n}完成"
# 方法1:ThreadPoolExecutor
def process_with_threads():
with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
# 提交所有任务
futures = [executor.submit(heavy_task, i) for i in range(3)]
# 收集结果(按完成顺序)
results = []
for future in concurrent.futures.as_completed(futures):
results.append(future.result())
return results
# 方法2:ProcessPoolExecutor(适合CPU密集型)
def process_with_processes():
with concurrent.futures.ProcessPoolExecutor() as executor:
results = list(executor.map(heavy_task, range(3)))
return results
# 使用示例
thread_results = process_with_threads()
print(f"线程结果: {thread_results}")
process_results = process_with_processes()
print(f"进程结果: {process_results}")
异步任务汇总(适合I/O密集型)
使用 asyncio 实现高效并发:
import asyncio
import aiohttp
async def fetch_url(session, url):
async with session.get(url) as response:
return await response.text()
async def gather_async_results():
urls = [
'http://example.com',
'http://httpbin.org/get',
'http://httpbin.org/status/200'
]
async with aiohttp.ClientSession() as session:
# 方法1:使用gather
tasks = [fetch_url(session, url) for url in urls]
results = await asyncio.gather(*tasks, return_exceptions=True)
# 方法2:使用TaskGroup(Python 3.11+)
# async with asyncio.TaskGroup() as tg:
# tasks = [tg.create_task(fetch_url(session, url)) for url in urls]
# results = [task.result() for task in tasks]
return results
# 运行异步任务
results = asyncio.run(gather_async_results())
带进度条和错误处理的高级汇总
适合生产环境:
from tqdm import tqdm
import logging
from dataclasses import dataclass
from typing import Any, List, Tuple
@dataclass
class TaskResult:
"""任务结果数据类"""
task_id: str
status: str # 'success' or 'failed'
data: Any = None
error: str = None
def execute_and_collect(tasks: List[Tuple[str, callable]]) -> List[TaskResult]:
"""
执行任务并汇总结果,带进度条和错误处理
Args:
tasks: [(task_id, task_function), ...]
Returns:
TaskResult列表
"""
results = []
# 使用tqdm显示进度
for task_id, task_func in tqdm(tasks, desc="处理任务"):
try:
data = task_func()
results.append(TaskResult(
task_id=task_id,
status='success',
data=data
))
logging.info(f"任务 {task_id} 成功完成")
except Exception as e:
results.append(TaskResult(
task_id=task_id,
status='failed',
error=str(e)
))
logging.error(f"任务 {task_id} 失败: {e}")
return results
# 使用示例
def sample_task1():
return "数据1"
def sample_task2():
raise ValueError("模拟错误")
def sample_task3():
return "数据3"
tasks = [
("task1", sample_task1),
("task2", sample_task2),
("task3", sample_task3)
]
final_results = execute_and_collect(tasks)
# 分析汇总结果
success_count = sum(1 for r in final_results if r.status == 'success')
failed_count = sum(1 for r in final_results if r.status == 'failed')
print(f"成功: {success_count}, 失败: {failed_count}")
print(f"汇总数据: {[r.data for r in final_results if r.status == 'success']}")
实用统计汇总(数据分析场景)
import pandas as pd
from collections import Counter
def summary_statistics(results):
"""对任务结果进行统计分析"""
if not results:
return {}
# 假设结果是数值列表
df = pd.DataFrame(results, columns=['value'])
summary = {
'总数': len(results),
'平均值': df['value'].mean(),
'中位数': df['value'].median(),
'标准差': df['value'].std(),
'最小值': df['value'].min(),
'最大值': df['value'].max(),
'四分位数': df['value'].quantile([0.25, 0.5, 0.75]).to_dict()
}
return summary
# 使用示例
test_results = [10, 20, 15, 25, 30, 20, 15, 35]
stats = summary_statistics(test_results)
for key, value in stats.items():
print(f"{key}: {value}")
选择建议
| 场景 | 推荐方法 |
|---|---|
| 简单顺序任务 | list.append() 或列表推导式 |
| 并发I/O任务 | asyncio.gather() |
| CPU密集型并行 | ProcessPoolExecutor.map() |
| 需要进度和错误处理 | 自定义 TaskResult 类 + tqdm |
| 数据分析汇总 | pandas DataFrame 统计 |
根据你的具体需求(任务数量、类型、是否并行、是否需要进度条)选择最适合的方法。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播