И 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())
прежде чем я сделаю какую-либо многопроцессорную обработку, я решил проблему.