Ami*_*it 5 python multithreading multiprocessing
我正在编写一个以并行方式执行函数的 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()
Run Code Online (Sandbox Code Playgroud)
我不知道如何获得sqr和cube函数的返回值。
我已经尝试过这个:
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()
Run Code Online (Sandbox Code Playgroud)
该程序将无限期暂停。我不明白这里出了什么问题?谁能帮我,我如何存储函数的返回结果?任何帮助,将不胜感激。
我将使用 multiprocessing.Pool 顺序执行cube()和sqr(),然后使用Pool.map()对每个输入进行并行化。这将消除对队列的需要,并简化主要功能。
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)]
Run Code Online (Sandbox Code Playgroud)
如何将结果全球化?这应该有效:
from multiprocessing import Process
results = []
def sqr(args):
for i in args:
results.append(i*i)
return results
def cube(args):
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()
Run Code Online (Sandbox Code Playgroud)