Параллельные вычисления на Python с использованием joblib

У меня возникают проблемы при попытке заставить мою параллельную обработку работать в функции, которая может быть вызвана из командной строки. Функция загружает данные с веб-сайта, выполняет некоторую обработку и сохраняет данные на диск, поэтому многопроцессорная обработка данных представляется очевидным решением. Однако когда я пытаюсь запустить функцию, она создает незанятые процессы Python и зависает, не зная, что я делаю неправильно. В настоящее время я использую Python 2.7 (64-битный) с 64-битным Windows 7 и JobLib, чтобы выполнить задачу.

Вот упрощенный код, который воспроизводит проблему:

import os,numpy as np
from joblib import Parallel, delayed

def foo(stations,wdir,multiprocess):
    if multiprocess==False:
        for a in stations:
            writefoo(wdir,a)
    if multiprocess==True:
        Parallel(n_jobs=len(stations))(delayed(writefoo)(wdir,station) for station in stations)

def writefoo(wdir,station):
    os.makedirs(os.path.join(wdir,station[0]))
    np.save(os.path.join(wdir,station[0],station[0]),station[1])

def go(multiprocess):
    stations=[['ST1',np.random.rand(1,1000).flatten()],['ST2',
               np.random.rand(1,1000).flatten()],['ST3',np.random.rand(1,1000).flatten()]]
    wdir=os.getcwd()
    foo(stations,wdir,multiprocess)

Теперь, когда я набираю go(True) с консоли ipython, создаются 3 новых процесса python, которые не используют% cpu и примерно одинакового объема памяти (16 МБ), но не создают файлы и просто сидят, пока я их не убью.

Когда я запускаю go(False), функция запускается всего за несколько мс и работает как положено, но последовательно, а не параллельно. Что я здесь не так делаю? Примечание. Важно, чтобы весь процесс можно было вызывать из командной строки, а не запускать сам скрипт, потому что код должен использоваться в модуле.

0 ответов

Другие вопросы по тегам