0

Я прочитал многопроцессорный документ. в python и обнаружил, что задача может быть назначена для разных ядер процессора. Мне нравится запускать следующий код (как начало) параллельно.Как реализовать одну программу нескольких данных (spmd) в python

from multiprocessing import Process 
import os 

def do(a): 
    for i in range(a): 
     print i  

if __name__ == "__main__": 
    proc1 = Process(target=do, args=(3,)) 
    proc2 = Process(target=do, args=(6,)) 
    proc1.start() 
    proc2.start() 

сейчас я получаю выход как 1 2 3, а затем 1 .... 6. но мне нужно работать как 1 1 2 2, т. е. я хочу запускать proc1 и proc2 параллельно (не один за другим).

ответ

0

Таким образом, вы можете выполнить свой код параллельно, используя map. Я использую задержку (с time.sleep), чтобы замедлить код, чтобы он печатался так, как вы хотите. Если вы не используете сон, первый процесс завершится до начала второго запуска ... и вы получите 0 1 2 0 1 2 3 4 5.

>>> from pathos.multiprocessing import ProcessingPool as Pool 
>>> p = Pool() 
>>> 
>>> def do(a): 
... for i in range(a): 
...  import time 
...  time.sleep(1) 
...  print i 
... 
>>> _ = p.map(do, [3,6]) 
0 
0 
1 
1 
2 
2 
3 
4 
5 
>>> 

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

0

Вы также можете использовать библиотеку pp. Я предпочитаю pp над многопроцессорной обработкой, поскольку он позволяет выполнять параллельную обработку в разных системах в сети. Функция (FUNC) может быть применена к списку входов (арг), используя простой код:

job_server=pp.Server(ncpus=num_local_procs,ppservers=nodes) 
result=[job() for job in job_server.submit(func,input) for arg in args] 

Вы также можете проверить больше примеров по адресу: https://github.com/gopiks/mappy/blob/master/map.py

 Смежные вопросы

  • Нет связанных вопросов^_^