gpt4 book ai didi

python - 如何在python的多处理进程中存储函数的返回值?

转载 作者:太空宇宙 更新时间:2023-11-04 02:49:44 24 4
gpt4 key购买 nike

我正在编写一个以并行方式执行函数的 python 程序。这是代码:

from multiprocessing import Process

def sqr(args):
results = []
for i in args:
results.append(i*i)
return results

def cube(args):
results = []
for i in args:
results.append(i*i*i)
return results

def main():
data = [1,2,3,4,5]
p1 = Process(target=sqr, args=(data,))
p1.start()
p2 = Process(target=cube, args=(data,))
p2.start()
p1.join()
p2.join()


main()

我不知道如何获取 sqrcube 函数的返回值。

我试过这个:

from multiprocessing import Process
from queue import Queue

def sqr(args, q):
results = []
for i in args:
results.append(i*i)
q.put(results)

def cube(args, q):
results = []
for i in args:
results.append(i*i*i)
q.put(results)

def main():
q = Queue()
data = [1,2,3,4,5]
p1 = Process(target=sqr, args=(data, q))
p1.start()
p2 = Process(target=cube, args=(data, q))
p2.start()
p1.join()
p2.join()
print(q.get())

main()

该程序将无限期暂停。我不明白这里出了什么问题?任何人都可以帮助我,我如何存储函数的返回结果?任何帮助将不胜感激。

最佳答案

我会使用 multiprocessing.Pool,按顺序执行 cube() 和 sqr(),然后使用 Pool.map() 为每个输入并行化。这将消除对 Queue 的需求并简化主要功能。

from multiprocessing import Pool, cpu_count

def sqr(n):
return (n*n)

def cube(n):
return (n*n*n)

def main(n):
return (cube(n),sqr(n))

with Pool(cpu_count()) as p:
inputs = [1,2,3,4,5,6,7,8,9]
results = p.map(main, inputs)

print(list(results))

[(1, 1), (8, 4), (27, 9), (64, 16), (125, 25), (216, 36), (343, 49), (512, 64), (729, 81)]

关于python - 如何在python的多处理进程中存储函数的返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44264514/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com