Это - мое мнение, и я держал бы пари на предположение, что большинство людей согласится, что открытые методы должны пойти сначала. Один из базовых принципов OO - то, что Вам не придется заботиться о реализации. Просто рассмотрение открытых методов должно сказать Вам все, что необходимо знать для использования класса.
Вероятно, глупое наблюдение, пожалуйста, простите меня за мою неопытность в Python.
Но ваш опрос цикла while для завершенных задач не засыпает и все время потребляет одно ядро, не это?
Еще одна вещь, на которую следует обратить внимание, это то, что если ваши задачи связаны с вводом-выводом, вы должны настроить M на количество параллельных дисков (?), которые у вас есть ... если они смонтированы по NFS на другой машине, вы могли бы потенциально иметь M> L.
g'luck!
На моей двухъядерной машине соблюдается общее количество процессов, т.е. если я выполняю
p = Pool(1)
, то я вижу, что в любой момент времени используется только один процессор. Процесс может быть перенесен на другой процессор , но тогда другой процессор простаивает. Я не понимаю, как все ваши процессоры могут использоваться одновременно, поэтому я не Следите за тем, как это может быть связано с вашими проблемами ввода-вывода. Конечно, если ваша симуляция связана с вводом-выводом, вы увидите вялый ввод-вывод независимо от использования ядра ...
Если вы работаете в Linux, используйте набор задач при запуске программы
Дочерний элемент, созданный с помощью fork (2), наследует маску сродства ЦП своего родителя. Маска сродства сохраняется при выполнении execve (2).
TASKSET (1)
Руководство пользователя Linux
ЗАДАЧИ (1)НАЗВАНИЕ набор задач - получить или установить привязку к процессору процесса
ОБЗОР набор задач [параметры] маска команда [аргумент] ... набор задач [параметры] -p [маска] pid
ОПИСАНИЕ набор задач используется для установки или получения привязки к процессору работающего процесса с учетом его PID или запустить новый КОМАНДА с заданным соответствием ЦП. Сходство ЦП - это планировщик свойство, которое "связывает" процесс с данный набор процессоров в системе. Планировщик Linux учитывает учитывая сходство с процессором и процесс не буду работать на любых других процессорах. Обратите внимание, что планировщик Linux также поддерживает естественную привязку к процессору: планировщик пытается сохранить процессы на одном и том же процессоре столько времени, сколько возможно для причины производительности. Следовательно, принуждение определенное соответствие ЦП полезно только в определенных приложениях.
Сходство ЦП представлено как битовая маска с самым низким порядком бит, соответствующий первому логичный ЦП и бит высшего порядка, соответствующий последнему логическому ЦП. Не все процессоры могут существовать в данной системе. Тем не менее, маска может указывать больше процессоров, чем имеется. Извлеченный маска будет отражать только те биты, которые кор- отвечать процессорам физически в системе. Если неверная маска данный (т.е. тот, который соответствует нет допустимые процессоры в текущей системе) возвращается ошибка. В маски обычно даются в шестнадцатеричный.
You might want to look into the following package:
http://pypi.python.org/pypi/affinity
It is a package that uses sched_setaffinity and sched _getaffinity.
The drawback is that it is highly Linux-specific.