请问 Python 中的 ThreadPoolExecutor 嵌套使用时外层如何能不等待内层结果并直接返回

2020-07-22 14:34:30 +08:00
 Hiyokunotori

先上代码

from concurrent.futures import ThreadPoolExecutor
import time
from loguru import logger

def func1(x):
    time.sleep(2)
    return x

def func2():
    my = []
    exe = ThreadPoolExecutor()
    for r in exe.map(func1,range(10)):
        my.append(r)
    exe.shutdown()
    logger.info(my)

def func3():
    exe = ThreadPoolExecutor(1)
    exe.submit(func2)
    # 这里我想先返回 1,然后异步执行函数 haha2,但是我如果设置了 wait 为 False 的话 haha2 就不会执行,
    # 不设置的话得等到 haha2 执行完毕才能返回 1,我该怎么做
    exe.shutdown(wait=False)
    return 1

if __name__ == '__main__':
    res = func3()
    print(res)

我现在的需求是有三个函数,函数 2 中会使用 ThreadPoolExecutor 去执行函数 1(为了提升效率),函数 3 中会执行函数 2 并返回一个值,但是我想函数 3 先返回值就给一个 ThreadPoolExecutor(1)并且设置 wait 为 False,但是这样函数 2 并没有执行,请问我该如何实现我得目的。。。还是说 ThreadPoolExecutor 不适用这种场景,那么我应该怎么办呢

1491 次点击
所在节点    Python
2 条回复
xiaolinjia
2020-07-22 15:08:16 +08:00
def func3():
import threading
t = threading.Thread(target=func2)
t.start()
return 1
ToughGuy
2020-07-22 16:28:09 +08:00
直接把 futures return 回去

def func2():
----....
----returun exe.map(func1,range(10))

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

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

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

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

© 2021 V2EX