合并来自多个进程的数据



对于这个多线程python代码,我想合并数据从每个过程变量"work_output"转换为全局变量"workoutput"。我不确定如何访问单个进程之外的变量或如何组合来自多个进程的数据。

#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]} startedn")
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)

编写返回结果的函数(如数学问题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]} startedn")
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()

stdout:

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]

最新更新