我想执行此功能而不必重写每个进程的所有代码。
def executeNode(node):
node.execution()
我认为不需要重复下一个代码n次的代码。我需要使用“进程而不是线程”。
a0 = Process(target=executeNode, args = (node1))
a1 = Process(target=executeNode, args = (node2))
a2 = Process(target=executeNode, args = (node3))
...............................
an = Process(target=executeNode, args = (nodeN))
因此,我决定创建一个节点列表,但是我不知道如何为列表的每个项目(节点)执行一个过程。
sNodes = []
for i in range(0, n):
node = node("a"+ str(i), (4001 + i))
sNodes.append(node)
如何为列表(sNodes)的每个项目(节点)执行一个过程。 谢谢大家。
答案 0 :(得分:3)
您可以使用Pool
:
from multiprocessing import Pool
if __name__ == '__main__':
with Pool(n) as p:
print(p.map(executeNode, sNodes))
n
是您想要的进程数。
如果您想要分离进程,或者您不希望通过使用另一个循环来获得更好的结果:
processes = []
for node in sNodes:
p = Process(target=executeNode, args = (node1))
processes.append(p)
p.Start()
一般性提示:具有很多的进程不会加快代码的速度,但会使处理器开始交换,并且一切都会变慢。万一您在寻找代码加速而不是逻辑体系结构的话。
答案 1 :(得分:0)
尝试这样的事情:
from multiprocessing import Pool
process_number = 4
nodes = [...]
def execute_node(node):
print(node)
pool = Pool(processes=process_number)
pool.starmap(execute_node, [(node,) for node in nodes])
pool.close()
您将在这里找到更多的英特尔信息:https://docs.python.org/3/library/multiprocessing.html