Мой код имеет следующую схему:
class A():
def evaluate(self):
b = B()
for i in range(30):
b.run()
class B():
def run(self):
pass
if __name__ == '__main__':
a = A()
for i in range(10):
a.evaluate()
И я хочу иметь два уровня параллелизма, первый на метод evaluate
, а второй на метод run
(вложенный параллелизм).Вопрос в том, как внедрить этот параллелизм, используя класс Pool многопроцессорного модуля ?Должен ли я передавать явно количество ядер?Решение не должно создавать процессы больше, чем число multiprocessing.cpu_count()
.
примечание: предположим, что количество ядер превышает 10.
Редактировать: Я видел много комментариев, в которых говорится, что Python не имеет истинного параллелизма из-заGIL, это верно для многопоточности Python, но для многопроцессорности это не совсем правильно, посмотрите здесь , также я рассчитал это также, что сделал статья , и результаты показывают, что это можетидти быстрее, чем последовательное выполнение.