本文目录导读:

我来详细介绍Python中迭代优化同步执行逻辑的几种方法:
基础同步执行框架
import time
from typing import List, Callable
class SyncOptimizer:
def __init__(self, tasks: List[Callable], max_iterations: int = 10):
self.tasks = tasks
self.max_iterations = max_iterations
self.results = []
def execute_sync(self):
"""基础同步执行"""
for task in self.tasks:
start = time.time()
result = task()
elapsed = time.time() - start
self.results.append({
'task': task.__name__,
'result': result,
'duration': elapsed
})
return self.results
带超时控制的同步执行
import signal
from functools import wraps
class TimeoutError(Exception):
pass
def timeout_handler(seconds):
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
def _handler(signum, frame):
raise TimeoutError(f"Task {func.__name__} timed out after {seconds}s")
signal.signal(signal.SIGALRM, _handler)
signal.alarm(seconds)
try:
result = func(*args, **kwargs)
finally:
signal.alarm(0)
return result
return wrapper
return decorator
class TimeoutSyncExecutor:
def __init__(self, tasks, timeout=10):
self.tasks = tasks
self.timeout = timeout
def execute_with_timeout(self):
results = []
for task in self.tasks:
try:
result = timeout_handler(self.timeout)(task)()
results.append({'status': 'success', 'result': result})
except TimeoutError as e:
results.append({'status': 'timeout', 'error': str(e)})
return results
迭代优化版本 - 动态调整执行顺序
class AdaptiveSyncOptimizer:
def __init__(self, tasks: List[Callable], convergence_threshold=0.1):
self.tasks = tasks
self.convergence_threshold = convergence_threshold
self.execution_history = {}
def optimize_execution_order(self):
"""基于历史执行时间优化任务执行顺序"""
for task in self.tasks:
task_name = task.__name__
if task_name not in self.execution_history:
self.execution_history[task_name] = []
# 按平均执行时间排序(短任务优先)
sorted_tasks = sorted(
self.tasks,
key=lambda t: self._get_average_time(t.__name__)
)
return sorted_tasks
def _get_average_time(self, task_name):
history = self.execution_history.get(task_name, [])
if not history:
return float('inf') # 新任务优先执行
return sum(history) / len(history)
def execute(self):
"""执行并优化"""
for iteration in range(10): # 迭代优化
print(f"\n--- Iteration {iteration + 1} ---")
# 动态优化执行顺序
optimized_tasks = self.optimize_execution_order()
iteration_results = []
for task in optimized_tasks:
start = time.time()
result = task()
elapsed = time.time() - start
# 更新历史记录
task_name = task.__name__
self.execution_history[task_name].append(elapsed)
iteration_results.append({
'task': task_name,
'result': result,
'duration': elapsed
})
# 检查收敛条件
if self._check_convergence(iteration_results):
print("Convergence achieved!")
break
return iteration_results
def _check_convergence(self, results):
"""检查执行时间是否收敛"""
durations = [r['duration'] for r in results]
if len(durations) < 2:
return False
mean = sum(durations) / len(durations)
variance = sum((d - mean) ** 2 for d in durations) / len(durations)
return variance < self.convergence_threshold
批量处理优化
class BatchSyncExecutor:
def __init__(self, tasks: List[Callable], batch_size=5):
self.tasks = tasks
self.batch_size = batch_size
self.performance_metrics = {}
def execute_in_batches(self):
"""分批次执行,并动态调整批次大小"""
total_tasks = len(self.tasks)
results = []
for batch_start in range(0, total_tasks, self.batch_size):
batch = self.tasks[batch_start:batch_start + self.batch_size]
# 执行批次中的任务
batch_results = []
for task in batch:
start = time.time()
result = task()
duration = time.time() - start
batch_results.append({
'task_name': task.__name__,
'result': result,
'duration': duration
})
# 更新性能指标
self._update_metrics(task.__name__, duration)
results.extend(batch_results)
# 动态调整批次大小
self._adjust_batch_size()
return results
def _update_metrics(self, task_name, duration):
if task_name not in self.performance_metrics:
self.performance_metrics[task_name] = []
self.performance_metrics[task_name].append(duration)
def _adjust_batch_size(self):
"""根据最近的性能数据调整批次大小"""
if len(self.performance_metrics) < 2:
return
avg_duration = sum(
sum(v) / len(v)
for v in self.performance_metrics.values()
) / len(self.performance_metrics)
self.batch_size = max(1, min(10, int(self.batch_size * (1 / avg_duration))))
完整的迭代优化示例
import random
# 模拟任务
def task_a():
time.sleep(random.uniform(0.1, 0.5))
return "A completed"
def task_b():
time.sleep(random.uniform(0.2, 0.6))
return "B completed"
def task_c():
time.sleep(random.uniform(0.3, 0.7))
return "C completed"
def main():
# 使用自适应优化器
optimizer = AdaptiveSyncOptimizer(
tasks=[task_a, task_b, task_c],
convergence_threshold=0.05
)
results = optimizer.execute()
print("\nFinal Results:")
for r in results:
print(f"{r['task']}: {r['duration']:.3f}s -> {r['result']}")
# 统计信息
total_time = sum(r['duration'] for r in results)
print(f"\nTotal time: {total_time:.3f}s")
# 优化后的执行顺序
optimized_order = optimizer.optimize_execution_order()
print("Optimized order:", [t.__name__ for t in optimized_order])
if __name__ == "__main__":
main()
关键优化策略
- 任务排序优化:根据历史执行时间动态调整执行顺序
- 超时控制:防止单个任务阻塞整个流程
- 批量处理:合理划分批次,平衡资源利用
- 收敛检测:当优化效果不明显时停止迭代
- 性能监控:持续追踪每个任务的执行时间
这种迭代优化方法可以在不引入异步编程的情况下,显著提升同步代码的执行效率。
版权声明: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直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播