【问题标题】:Clarification on ProcessPoolExecutor关于 ProcessPoolExecutor 的说明
【发布时间】:2022-06-20 09:14:20
【问题描述】:

我正在尝试了解 ProcessPoolExecutor 的工作原理。我尝试了以下代码,但收到错误:


AttributeError Traceback(最近一次调用最后一次) 在 18 p10=过程提交(等待,1) 19 ---> 20 Proc.join() 21 过程关闭() 22

AttributeError: 'ProcessPoolExecutor' 对象没有属性 'join'

这就是我想要做的,我希望能够在流程执行完成后运行打印语句。关于我所缺少的任何想法

def wait(n):
    print(f"waiting for {n} second(s)")
    time.sleep(n)
    return("sleeping over")
t5=time.time()

if __name__=='__main__':
    Proc=ProcessPoolExecutor(10)
    p1=Proc.submit(wait,2)
    p2=Proc.submit(wait,1)
    p3=Proc.submit(wait,2)
    p4=Proc.submit(wait,1)
    p5=Proc.submit(wait,2)
    p6=Proc.submit(wait,1)
    p7=Proc.submit(wait,2)
    p8=Proc.submit(wait,1)
    p9=Proc.submit(wait,2)
    p10=Proc.submit(wait,1)
    
    Proc.join()
    Proc.close()
    
    print(p1.result())
    print(p2.result())
    print(p3.result())
    print(p4.result())
    print(p5.result())
    print(p6.result())
    print(p7.result())
    print(p8.result())
    print(p9.result())
    print(p10.result())
    
    t6=time.time()
    
    print("Time taken to run this code block is",t6-t5)

【问题讨论】:

    标签: python-3.x multiprocessing


    【解决方案1】:

    如果您想避免异常,只需删除 Proc.join()Proc.close()ProcessPoolExecutor 没有实现这些。您可以参考this doc了解更多详情。

    此外,这里还有一种将ProcessPoolExecutor与上下文管理器with一起使用的方法:

    import time
    from concurrent.futures import ProcessPoolExecutor
    
    
    def wait(n):
        print(f"waiting for {n} second(s)")
        time.sleep(n)
        return "sleeping over"
    
    
    if __name__ == "__main__":
    
        t5 = time.time()
    
        with ProcessPoolExecutor(10) as proc:
            p1 = proc.submit(wait, 2)
            p2 = proc.submit(wait, 1)
            p3 = proc.submit(wait, 2)
            p4 = proc.submit(wait, 1)
            p5 = proc.submit(wait, 2)
            p6 = proc.submit(wait, 1)
            p7 = proc.submit(wait, 2)
            p8 = proc.submit(wait, 1)
            p9 = proc.submit(wait, 2)
            p10 = proc.submit(wait, 1)
        
        print(p1.result())
        print(p2.result())
        print(p3.result())
        print(p4.result())
        print(p5.result())
        print(p6.result())
        print(p7.result())
        print(p8.result())
        print(p9.result())
        print(p10.result())
        
        t6 = time.time()
    
        print(t6 - t5)
    

    【讨论】:

      猜你喜欢
      • 2019-08-29
      • 2019-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多