gpt4 book ai didi

python - 了解 concurrent.futures.Executor.map()

转载 作者:行者123 更新时间:2023-12-03 23:57:27 26 4
gpt4 key购买 nike

我正在尝试使用进程和 concurrent.futures 并行化一些 Python 代码。 .看起来我可以通过 submitting 并行执行一个函数多次调用,然后调用 Future.result() 在 future 上,或使用 Executor.map() .
我想知道后者是否只是前者的语法糖,以及在性能方面是否有任何差异。从文档中似乎并没有立即清楚。

最佳答案

它将允许您同时执行一个函数多次,而不是真正的并行执行。

性能方面,我最近发现 ProcessPoolExecutor.submit()ProcessPoolExecutor.map()消耗相同数量的计算时间来完成相同的任务。注:.submit()返回一个 future 对象(我们称之为 f),你需要使用它的 f.result选项来查看它的结果。另一方面,.map()直接返回一个迭代器。

当使用 sorted 方法将它们的结果转换为有序列表时,我发现整个 .map() 的计算时间代码可以比整个 .submit() 更快特定场景下的代码。

当使用 list 方法将它们的结果转换为无序列表时,整个 .submit() 的计算时间和 .map()代码是一样的。此外,这些代码比使用排序方法的代码执行得更快。

您可以在我的answer中阅读详细信息.在那里,我还分享了我的代码,您可以在其中看到它们是如何工作的。我希望他们能对你有所帮助。

我没用过ThreadPoolExecutor所以我不能详细评论。但是,我读到它们的实现方式与 ProcessPoolExecutor 相同。它们更适合用于 I/O 绑定(bind)任务而不是 CPU 绑定(bind)任务。您确实需要指定 max_workers参数,即最大线程数,而在 ProcessPoolExecutor max_workers是一个可选参数,默认为 os.cpu_count() 返回的 CPU 数量.

关于python - 了解 concurrent.futures.Executor.map(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41903230/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com