小菜鸡请教 concurrent.futures.ThreadPoolExecutor 的问题

2023-02-07 19:39:05 +08:00
 ohayoo

各位大佬,python 的 concurrent.futures.ThreadPoolExecutor 下的 map 返回值是按提交顺序来的吗?

我之前一直以为用 map 的话 返回值是按提交的顺序来的,但今天看 map 对应的代码,注释是这样写的

Returns: An iterator equivalent to: map(func, *iterables) but the calls may be evaluated out-of-order.

这个意思是可能会乱序,并不能保证顺序返回吗?

如果 map 不能保证顺序返回, 但多线程的时候又希望按顺序返回,该怎么办呢?还望大佬们赐教

2048 次点击
所在节点    Python
6 条回复
echoless
2023-02-07 19:57:27 +08:00
https://pymotw.com/3/concurrent.futures/

map 会保证结果是 in order 的, 虽然 func 执行可能 out of order
wuwukai007
2023-02-07 19:57:36 +08:00
jobs = [pool.submit(fn,i) for i in range(10)]
[i.result() for i in jobs]
ClericPy
2023-02-07 20:14:13 +08:00
结果不乱, 执行乱
julyclyde
2023-02-08 10:40:18 +08:00
如果你希望按顺序返回
那是你的需求有问题
chr666
2023-02-20 13:34:17 +08:00
传个 id 进去,最后返回时候排个序不就行了
ohayoo
2023-02-20 13:42:07 +08:00
@chr666 嗯嗯, 这个已经搞定了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/914041

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX