我想将我的计算作业分配给多个 cpu,所以我选择了多处理。然而,结果并不是我想要的。
import numpy as np
from multiprocessing import Process
def func(begin,end):
print('*'*5)
print('begin=%d' %(begin))
for i in range(begin,end):
for j in range(10):
myarray[i][j]=1
myarray=np.zeros((12,10))
print(myarray)
for i in range(4):
begin=i*3
end=(i+1)*3
p=Process(target=func,args=(begin,end,))
p.start()
print('*'*5)
print(myarray)
我认为 myarray 应该是所有的。但它根本没有改变。为什么? func 函数不改变 myarray 的元素?
我尝试了此链接中的示例 enter link description here
from multiprocessing import Process
def f(name):
print('hello',name)
p=Process(target=f,args=('bob',))
p.start()
它在屏幕上没有显示任何内容。为什么?
我应该如何用 python 完成我的计算?谁能给出一种充分利用多CPU的方法?
最佳答案
这里有两个问题:
join()
以确保它们已完成。 Queue
或 Pipe
。检查 the documentation that talks about exchanging data between processes 这是一个使用您发布的基础的工作示例(它不是为了快速,只是为了展示通信是如何完成的):
from multiprocessing import Process, freeze_support, Queue
def func(my_id, q, begin, end):
global myarray
print('Process %d has range: %d - %d' % (my_id, begin, end))
for i in range(begin,end):
q.put((i, i * 2))
if __name__ == "__main__":
freeze_support()
q = Queue()
processes = []
myarray=[0] * 12
print("At the beginning the array is ", myarray)
for i in range(4):
begin = i*3
end = (i+1)*3
p = Process(target=func, args=(i, q, begin, end))
p.start()
processes.append(p)
for p in processes:
p.join()
while not q.empty():
(index, value) = q.get()
myarray[index] = value
print("At the end the array is ", myarray)
尝试通过
p.join()
更改 pass
行,看看会发生什么:)关于python 多处理 : processes don't work,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32303614/