Обработка переменных в функции с параллельным порождением в Python - PullRequest
1 голос
/ 24 октября 2011

У меня есть симулятор Монте-Карло, который имеет функцию вычисления, которую он вызывает много раз (миллионы или больше) в цикле.Чтобы ускорить это, я хотел бы разделить его на несколько параллельных потоковых вызовов симулятора.то есть.Если я хочу запустить его в общей сложности 1 миллион раз, разделите его на, возможно, 4 - 250 000 прогонов, идущих параллельно.Как мне справиться с этим, чтобы в каждом потоке использовались одинаковые имена переменных, чтобы не было конфликтов?Нужно ли создавать 4 отдельные версии симулятора с переменными с разными именами?

Я начал писать версию с использованием модуля потоков Python, но уверен, что с переменными все еще будут проблемы.

Есть предложения?

Спасибо за ваше время.

Кайл

1 Ответ

2 голосов
/ 24 октября 2011

Если ваш код чистый Python и вы используете CPython, многопоточность, скорее всего, не ускорит ваш код из-за глобальной блокировки интерпретатора .Вероятно, вы ищете модуль multiprocessing , в частности его Pool.map() метод .

Поскольку использование mulitprocessing означает использование отдельных процессов вместо простоВ отдельных потоках такие вещи, как блокировка, станут гораздо менее важной проблемой.

Тем не менее, векторизация вашего кода с использованием NumPy или написание внутреннего цикла на эффективном скомпилированном языке, таком как C или Cython, вероятно, даст вам гораздо большую скорость.чем распараллеливание до четырех ядер.

...