Я знаю несколько вопросов и ответов по этой теме, но не нашел удовлетворительного ответа на эту конкретную проблему:
Каков самый простой способ простейшей параллелизации разделяемой памяти в цикле python, где массивы numpy управляются с помощью функций numpy/scipy?
Я не ищу наиболее эффективный способ, я просто хотел, чтобы что-то простое реализовано, что не требует значительного перезаписи, когда цикл не запускается параллельно. Точно так же, как OpenMP реализуется на языках более низкого уровня.
Лучший ответ, который я видел в этом отношении, - этот, но это довольно неуклюжий способ, который требует, чтобы он выражал цикл в функцию, которая принимает один аргумент, несколько строк преобразования с общим массивом crud, похоже, требует, чтобы параллельная функция вызывалась из __main__
, и, похоже, она не работает из интерактивного приглашения (где я трачу много времени).
При всей простоте Python это действительно лучший способ parellelise loop? В самом деле? Это что-то тривиальное для параллелизма в модуле OpenMP.
Я внимательно прочитал непрозрачную документацию модуля многопроцессорности, только чтобы узнать, что он настолько общий, что он подходит ко всему, кроме простой параллелизации цикла. Я не заинтересован в настройке менеджеров, прокси, труб и т.д. У меня просто простой цикл, полностью параллельный, который не имеет никакой связи между задачами. Использование MPI для параллелизации такой простой ситуации кажется излишним, не говоря уже о том, что в этом случае это будет неэффективно.
У меня не было времени узнать о множестве разных параллельных пакетов с разделяемой памятью для Python, но было интересно, есть ли у кого-то больше опыта в этом и может показать мне более простой способ. Пожалуйста, не предлагайте методы последовательной оптимизации, такие как Cython (я уже использую его), или используя параллельные функции numpy/scipy, такие как BLAS (мой случай более общий и более параллельный).