Python中的并发未来未等待进程完成

1 投票
1 回答
1368 浏览
提问于 2025-06-18 04:11

我有一个叫做 main() 的函数,它会生成 4 个进程,并最终开始执行它们,但一旦开始,它会多次循环执行这段代码。我想要的效果应该很明显:先打印“hello1”,然后执行这些进程(也就是执行打印语句),最后再打印“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")

相关问题:

  • 暂无相关问题
暂无标签

1 个回答

0

我觉得主要的问题在于,for循环被放在了with上下文管理器里面,这个是用来处理concurrent.futures的调用。另外,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")

撰写回答