代码之家  ›  专栏  ›  技术社区  ›  Jamie M

组合来自多个进程的数据

  •  1
  • Jamie M  · 技术社区  · 2 年前

    对于这个多线程python代码,我想结合数据 我不知道如何访问单个进程之外的变量或如何组合 来自多个进程的数据。

    #edited code based on comment that answered the question
    
    from multiprocessing import Pool, cpu_count
    import time
    import psutil
    import os
    import math
    
    work =(["process1", 1,2], ["process2", 2,3], ["process3", 3,4], ["process4", 4,5], ["process5", 5,6], ["process6", 6,7])
    workOutputAll=[]
    
    def calculateOutput(work_data):
        #timeToSleep=int(100)
        #time.sleep(timeToSleep)
        work_output=work_data[1]*work_data[2]
        print(f"Process {work_data[0]} {work_data[1]}*{work_data[2]}={work_output}\n")
        #workOutput.append(work_output)
        return work_output
    
    def work_log(work_data):
        print(F"Process {work_data[0]} started\n")
        y=calculateOutput(work_data)
        print(f"Process {work_data[0]} Finished.\n")
        return y
    
    def pool_handler():
        p=Pool(4)
        z=p.map(work_log, work)
        workOutputAll.append(z)
    
    if __name__ == '__main__':
        pool_handler()
        print(workOutputAll)
    
    1 回复  |  直到 2 年前
        1
  •  3
  •   tdelaney    2 年前

    编写返回结果的函数(如数学问题 y = f(x) ). 然后 map()

    from multiprocessing import Pool, cpu_count
    import time
    import psutil
    import os
    import math
    
    work =(["process1", 1,2], ["process2", 2,3], ["process3", 3,4], ["process4", 4,5], ["process5", 5,6], ["process6", 6,7])
    
    
    def calculate_output(work_data):
        work_output=work_data[1]*work_data[2]
        print(f"Process {work_data[0]} {work_data[1]}*{work_data[2]}={work_output}\n")
        return work_output
    
    def work_log(work_data):
        print(F"Process {work_data[0]} started\n")
        result = calculate_output(work_data)
        print(f"Process {work_data[0]} Finished.\n")
        return result
    
    def pool_handler():
        p=Pool(4)
        results = p.map(work_log, work)
        print(results)
    
    if __name__ == '__main__':
        pool_handler()
    

    标准:

    Process process1 started
    
    Process process1 1*2=2
    
    Process process1 Finished.
    
    Process process2 started
    
    Process process2 2*3=6
    
    Process process2 Finished.
    
    Process process4 started
    
    Process process4 4*5=20
    
    Process process4 Finished.
    
    Process process3 started
    
    Process process6 started
    
    Process process6 6*7=42
    
    Process process3 3*4=12
    
    Process process6 Finished.
    Process process3 Finished.
    
    
    Process process5 started
    
    Process process5 5*6=30
    
    Process process5 Finished.
    
    [2, 6, 12, 20, 30, 42]