在Python中,可以使用concurrent.futures模块来实现并行运行循环并设置超时。下面是一个示例代码:
import concurrent.futures
import time
def task(num):
# 模拟任务执行
time.sleep(num)
return num
def run_parallel(tasks, timeout):
# 创建线程池
with concurrent.futures.ThreadPoolExecutor() as executor:
# 提交任务并获取Future对象
futures = [executor.submit(task, num) for num in tasks]
# 等待所有任务完成或超时
results = []
for future in concurrent.futures.as_completed(futures, timeout):
try:
result = future.result()
results.append(result)
except concurrent.futures.TimeoutError:
print("任务超时")
return results
# 示例调用
tasks = [1, 2, 3, 4, 5]
timeout = 2
results = run_parallel(tasks, timeout)
print(results)
在上面的示例中,我们定义了一个task函数来模拟实际的任务执行,该函数接受一个参数num作为任务的参数,并使用time.sleep来模拟任务的执行时间。
然后,我们定义了一个run_parallel函数来并行运行循环中的任务并设置超时。在该函数中,我们首先创建了一个线程池,然后使用executor.submit方法提交任务并获取对应的Future对象。
接下来,我们使用concurrent.futures.as_completed来等待任务完成或超时。在循环中,我们遍历所有的Future对象,并尝试通过future.result获取任务的返回结果,如果任务在超时时间内完成,我们将结果添加到一个列表中。如果任务超时,我们捕获concurrent.futures.TimeoutError异常并打印相应的提示信息。
最后,我们在示例调用中传入任务列表和超时时间,并打印最终的结果。
请注意,上述示例使用了线程池来并行执行任务,如果你需要使用进程池来实现并行,只需将concurrent.futures.ThreadPoolExecutor()替换为concurrent.futures.ProcessPoolExecutor()即可。
上一篇:并行运行循环
下一篇:并行运行循环(具体)