concurrent.futures模块使用方法附代码
时间: 2024-05-10 19:18:52 浏览: 154
Python concurrent.futures模块使用实例
concurrent.futures是Python标准库中的一个模块,可以用于实现并发执行的任务。其中包括两个子模块:ThreadPoolExecutor和ProcessPoolExecutor,分别用于多线程和多进程执行任务。
以下是一个使用ThreadPoolExecutor的例子:
```python
import concurrent.futures
import time
def task(n):
print(f"Start task {n}")
time.sleep(2)
print(f"End task {n}")
return n * n
if __name__ == "__main__":
with concurrent.futures.ThreadPoolExecutor() as executor:
# 提交5个任务
tasks = [executor.submit(task, i) for i in range(5)]
# 等待任务完成并获取结果
results = [task.result() for task in concurrent.futures.as_completed(tasks)]
print(f"Results: {results}")
```
输出:
```
Start task 0
Start task 1
Start task 2
Start task 3
Start task 4
End task 0
End task 1
End task 2
End task 3
End task 4
Results: [0, 1, 4, 9, 16]
```
代码解释:
1. 定义了一个task函数,接受一个参数n,并打印开始和结束信息,最后返回n的平方。
2. 在主程序中,使用with语句创建一个ThreadPoolExecutor对象,该对象会自动管理线程池的生命周期。
3. 使用executor.submit方法提交5个任务,并将返回的Future对象保存到tasks列表中。
4. 使用concurrent.futures.as_completed方法等待所有任务完成,并获取每个任务的结果。该方法返回一个生成器,可以迭代得到每个任务的Future对象,当Future对象完成时,会返回对应的结果。
5. 最后打印结果。
注意事项:
1. 多线程和多进程的使用方法类似,只需要将ThreadPoolExecutor替换为ProcessPoolExecutor即可。
2. 在使用多线程和多进程时,需要注意线程/进程之间的安全问题,如共享变量的访问等。
3. 在使用多进程时,需要注意对象的序列化问题,只有可序列化的对象才能在进程之间传递。
阅读全文