И multiprocessing.map, и joblib используют только 1 процессор после обновления с Ubuntu 10.10 до 12.04

У меня был некоторый отлично работающий код Python, который использовал многопроцессорный модуль и загрузил все 8 процессоров на моей машине на 100%.

После того, как я обновил Ubuntu 10.10 до 12.04 (наиболее очевидная вещь, может быть, я сделал что-то еще, что все сломало), он перестал работать. После многих отладок я обнаружил, что даже в простейшем случае оба модуля используют только 1 процессор:

from pylab import *
import multiprocessing as mp
from joblib import Parallel, delayed

def f(i):
    # Slow calculation
    x = 1
    for j in range(100000): x = cos(x)
    print i, x

if __name__ == '__main__':
    # Try to multiprocess with multiprocessing
    mp.Pool(processes=8).map(f, range(100))
    # Try to multiprocess with joblib
    Parallel(n_jobs=8)(delayed(f)(i) for i in range(100))

Мне нужно использовать все 8 процессоров в моей системе. Любые идеи о том, что я должен посмотреть, чтобы исправить проблему?

РЕДАКТИРОВАТЬ:

Как указал ali_m в комментарии здесь и в ответе на вопрос: почему многопроцессорная обработка использует только одно ядро ​​после импорта numpy? проблема связана с numpy испортить сродство с процессором. призвание

os.system('taskset -p 0xffffffff %d' % os.getpid())

Прежде чем я сделаю какую-либо многопроцессорную работу, я решил проблему.

1 ответ

Решение перенесено из сообщения с вопросом user1084871

Как отметил user1461210 в комментарии здесь и в ответе на вопрос « Почему многопроцессорная обработка использует только одно ядро ​​​​после импорта numpy?»проблема связана сnumpyзаморочился с привязкой к процессору. Вызов

       os.system('taskset -p 0xffffffff %d' % os.getpid())

прежде чем я сделаю какую-либо многопроцессорную обработку, я решил проблему.

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