pythonhosted.org/psutil
двосхищу это, говоря, что я новичок в параллельной обработке. Работаю над тем, чтобы стать лучше, но я не могу найти ответ на мою проблему, которая кажется довольно уникальной.
У меня проблемы с этим фрагментом кода:
from joblib import Parallel
import multiprocessing
n_cores = multiprocessing.cpu_count()
Parallel(n_jobs=n_cores)(delayed(blexon)(gene,genomes) for gene in genes)
'genes' и 'genomes' - это списки строк. В моем списке генов я могу иметь сотни генов. Я использую Parallel для запуска этого процесса на всех этих генах, и это работает! Если вы считаете, что гены работают одновременно как наборы, то для первых нескольких «наборов» я могу использовать все ядра моего компьютера. Однако после нескольких подходов программа использует только одно ядро. Если у меня 12 ядер, 12 генов будут работать одновременно в течение нескольких итераций набора, но в какой-то момент будет работать только один ген.
Я нашел информацию о Parallel, использующем только одно ядро со scipy (которое я использую в этом скрипте), но это странное поведение: он временно использует все ядра перед переключением на использование одного ядра.
Я не уверен, как решить эту проблему. У кого-нибудь есть вход?
Спасибо.
Система: Ubuntu 16.04 LTS Python 3.5.2 joblib 0.9.4
---РЕДАКТИРОВАТЬ---
Вот фрагмент кода, который я использовал, чтобы попытаться решить проблему схожести процессора:
p = psutil.Process(os.getpid())
print(p.cpu_affinity())
p.cpu_affinity(range(multiprocessing.cpu_count()))
print(p.cpu_affinity())
Выход: (Этот компьютер имеет 12 ядер)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
--РЕДАКТИРОВАТЬ--
После просмотра htop во время работы программы (каждая итерация может занять несколько минут), я обнаружил, что количество ядер постепенно уменьшается. Я начал с 12 ядер, и после этого набора, я до 11 ядер, работающих параллельно.