Создавайте разные процессы, используя список объектов - PullRequest
0 голосов
/ 07 марта 2019

Я хочу выполнить эту функцию без необходимости переписывать весь код для каждого процесса.

def executeNode(node):
    node.execution()

И код, который я не чувствую необходимости повторять n раз следующий. Мне нужно использовать Process, а не Threads.

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). Спасибо всем.

Ответы [ 2 ]

3 голосов
/ 07 марта 2019

Вы можете использовать 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()

Общий совет: наличие большого количества процессов не ускорит ваш код, но заставит ваш процессор начать перестановку, и все будет работать медленнее. На всякий случай, если вы ищете ускорение кода вместо логической архитектуры.

0 голосов
/ 07 марта 2019

Попробуйте что-то вроде этого:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...