【问题标题】:Running Multiple Process At The Same Time And Returning the Results同时运行多个进程并返回结果
【发布时间】:2020-11-13 08:01:22
【问题描述】:

我想用不同的参数同时执行一个函数,并且还必须在我的 main.js 中取回返回值。我的问题的伪代码是

def Function(data):
      print("Function Running With Values" , data[0],"and",data[1],"At timestamp : " ,time.time())
      return data[0]+data[1]


Results= []
Values= [ [1,2],[2,3],[4,5],[1,4]]
#calling function for all Values and return the result in results variable in sequence.

【问题讨论】:

    标签: python multithreading multiprocessing python-multiprocessing


    【解决方案1】:

    我不确定你所说的“同时”是什么意思:

    如果顺序处理没问题this

    Results = list(map(Function, Values))
    print(Results)
    

    或更多pythonic list comprehension

    Results = [Function(value) for value in Values]
    print(Results)
    

    为您提供以下输出

    Function Running With Values 1 and 2 At timestamp :  1605276375.4642859
    Function Running With Values 2 and 3 At timestamp :  1605276375.4645345
    Function Running With Values 4 and 5 At timestamp :  1605276375.4647174
    Function Running With Values 1 and 4 At timestamp :  1605276375.4648669
    [3, 5, 9, 5]
    

    如果你真的想要 multiprocessing 那么this

    import multiprocessing as mp
    
    with mp.Pool() as p:
        Results = list(p.map(Function, Values))
    
    print(Results)
    

    this

    from concurrent.futures import ProcessPoolExecutor
    
    with ProcessPoolExecutor() as p:
        Results = list(p.map(Function, Values))
    
    print(Results)
    

    为您提供类似的输出

    Function Running With Values 1 and 2 At timestamp :  1605276375.4532914
    Function Running With Values 4 and 5 At timestamp :  1605276375.4547572
    Function Running With Values 2 and 3 At timestamp :  1605276375.4549458
    Function Running With Values 1 and 4 At timestamp :  1605276375.456188
    [3, 5, 9, 5]
    

    如果您想要多处理,那么您应该更深入地研究它,以确保没有任何问题并且处理确实更快。但是您的示例是一个经典的 MapReduce 场景,应该可以正常工作。

    这就是你要找的吗?

    【讨论】:

    • 谢谢!完美解决了我的问题..! “同时”我的意思不仅仅是多处理:)
    • @TigerStrom 那么对不起其他的东西!一些额外的点:你需要玩一点才能达到最佳速度。 mp.PoolProcessPoolExecutor 都允许指定最大值。应该同时运行的进程数(工人,...)。标准是您的机器拥有的 CPU(核心)数量,但这并不总是最佳选择。 .map 有一个可选参数 chunksize。我发现将其设置为参数列表的长度除以指定的进程数通常是最佳选择。 ...
    猜你喜欢
    • 2015-12-08
    • 2019-04-13
    • 1970-01-01
    • 1970-01-01
    • 2018-02-12
    • 1970-01-01
    • 2019-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多