【问题标题】:Concurrent futures in python doesn't wait for processes to finishpython中的并发期货不等待进程完成
【发布时间】:2020-05-18 23:28:04
【问题描述】:

我有一个函数 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")

【问题讨论】:

    标签: python concurrency multiple-processes


    【解决方案1】:

    我认为主要问题是 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")
    

    【讨论】:

      猜你喜欢
      • 2015-08-24
      • 1970-01-01
      • 2013-06-29
      • 2015-05-27
      • 2022-01-23
      • 1970-01-01
      • 2013-06-30
      • 2010-11-06
      相关资源
      最近更新 更多