在document中,显示了一个有关如何在进程之间共享状态的示例。为了节省时间,我将代码发布在下面的文档中。
from multiprocessing import Process, Value, Array
def f(n, a):
n.value = 3.1415927
for i in range(len(a)):
a[i] = -a[i]
if __name__ == '__main__':
num = Value('d', 0.0)
arr = Array('i', range(10))
p = Process(target=f, args=(num, arr))
p.start()
p.join()
print num.value
print arr[:]
我在Linux超级计算系统上编写代码,在该系统上,我可以分配固定数量的内核,并且每个节点可以分配一定数量的内核。那么,如何在此框架中编写代码分配工作人员呢?Python是否会自动充分利用内核?为了在此框架中充分利用竞争资源,分配参数的正确方法是什么?
可能的答案:
from multiprocessing import Process, Value, Array, Pool
import random
def f(n, a):
n.value = 3.1415927
a[random.randint(5)] = 0
if __name__ == '__main__':
num = Value('d', 0.0)
arr = Array('i', range(10))
# you can manually set the number of workers
workers = 5
# or, if you want to use all cores,
# use the maximum number of existing cores to set workers
# workers = cpu_count()
p = Pool(workers)
results = p.map(f, (num, arr))
print num.value
print arr[:]
在上面的代码中,最后的打印语句应打印3.1415927
和[0,0,0,0,0,6,7,8,9]
。
如果要使用流程,则必须手动设置和管理每个流程的开始和结束:
from multiprocessing import Process, Value, Array, Pool
import random
def f(n, a):
n.value = 3.1415927
a[random.randint(5)] = 0
if __name__ == '__main__':
num = Value('d', 0.0)
arr = Array('i', range(10))
# if you want to use all cores,
# use the maximum number of existing cores to set workers
workers = cpu_count()
prcs = [Process(target=f, args=(num, arr)).start() for i in range(workers)]
results = [i.join() for i in prcs]
print num.value
print arr[:]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句