python 中的并发 futures 不等待进程完成

Concurrent futures in python doesn't wait for processes to finish

我有一个函数,main(),它生成 4 个进程,并最终开始执行它们,但是一旦它开始多次,它就会循环遍历整个代码块。我想要做什么我认为是显而易见的; print "hello1",执行进程(因此执行 print 语句),然后打印 "hello2"

我做错了什么?如果更容易的话,也会对使用 multiprocessing.Process() 的解决方案持开放态度,但我也遇到了同样的问题。


def funcy(c):
    print("Hi " + str(c))
    for e in range(1000):
        e = e
    return c*2

print("hello1")

def main():
    with concurrent.futures.ProcessPoolExecutor() as executor:
        f = [1,2,3,4]
        results = executor.map(funcy,f)

        for result in results:
            print(result)

if __name__ == '__main__':
    main()

print("hello2")

我认为主要问题是 for 循环在 concurrent.futures 调用的 with 上下文管理器中缩进。此外, print("hello1") 似乎不合适。 print("hello2") 需要缩进。

我认为下面的编辑是您要找的...也许...

import concurrent.futures

def funcy(c):
    print("Hi " + str(c))
    for e in range(1000):
        e = e
    return c*2

def main():
    with concurrent.futures.ProcessPoolExecutor() as executor:
        f = [1,2,3,4]
        results = executor.map(funcy,f)

    for result in results:
        print(result)

if __name__ == '__main__':
    print("hello1")

    main()

    print("hello2")