在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()
即可。
上一篇:并行运行循环
下一篇:并行运行循环(具体)