Python Простой L oop Блокнот Jupyter для распараллеливания - PullRequest
0 голосов
/ 27 мая 2020

Я пытаюсь распараллелить простой python l oop с помощью Jupyter Notebook. Я попытался использовать Pool, но он просто зависает навсегда, и мне пришлось убить ноутбук, чтобы остановить его.

def process_frame(f):
    new_dict = dict()
    pc_dict = calculate_area(fl)
    for key in pc_dict:
        if key not in new_dict:
            new_dict[key] = 0
        new_dict[key] = float(sum(pc_dict[key]))
    full_pc_dict[fl] = new_dict

frames_list = [0, 1, 2, 3, 4, 5, 6]

Я хочу process_frame для каждого кадра в frames_list.

Обратите внимание, что окончательный результат должен быть dict со всеми выходами из process_frame. Я не знаю, может ли быть хорошей идеей добавление его в конец функции.

Есть предложения, как это сделать с помощью Jupyter Notebook? Также, возможно ли, чтобы tqdm работал с этой параллельной обработкой?

С уважением

1 Ответ

1 голос
/ 27 мая 2020

[ОБНОВЛЕНО]
Если вы хотите использовать многопроцессорность внутри ноутбуков jupyter, вы хотите использовать многопроцессорный пакет вместо встроенного multiprocessing (есть известная проблема с основной функцией ноутбуков jupyter vs multiprocessing)

Создайте отдельный файл .py с вашей функцией magi c. Если вы хотите сделать это в своем блокноте - используйте что-то вроде этого в отдельной ячейке кода:

%%writefile magic_functions.py

def magic_function(f):
    return f+10

def process_frame(f):
    # changed your logic here as I couldn't repro it
    return f, magic_function(f)

OUT: Написание magic_functions.py

А затем запустите свой код параллельно:

from tqdm import tqdm

from multiprocess import Pool
from magic_functions import process_frame

frames_list = [0, 1, 2, 3, 4, 5, 6]

max_pool = 5

with Pool(max_pool) as p:
    pool_outputs = list(
        tqdm(
            p.imap(process_frame,
                   frames_list),
            total=len(frames_list)
        )
    )    

print(pool_outputs)
new_dict = dict(pool_outputs)

print("dict:", new_dict)

ВЫХОД:

100%|████████████████████████████████████████████████████████████████████████████████████| 7/7 [00:00<00:00, 37.63it/s]

[(0, 10), (1, 11), (2, 12), (3, 13), (4, 14), (5, 15), (6, 16)]
dict: {0: 10, 1: 11, 2: 12, 3: 13, 4: 14, 5: 15, 6: 16}


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