Page 86 - 6734
P. 86

multiprocessing – підтримка багатох процесів
               multiprocessing – це пакет, який підтримує створення процесів
           із  використанням  API,  який  подібний  на  API  модуля  threading  [5,
           19]. Забезпечує локальний і віддалений паралелізм, ефективно долає
           GIL шляхом використання підпроцесів замість потоків. У прикладі
           розпаралелюється  задача  знаходження  квадратів  50  матриць
           1000x1000 за допомогою класу Poll і його методу map. Зауважте,
           що  виграш  у  продуктивності  буде  досягнуто  тільки  на
           багатопроцесорній  системі.  Виконайте  програму  послідовно  в
           паралельному і звичайному режимах так:

           python main.py
           python main.py s
               Для визначення продуктивності програми використано модуль
           timeit. У Windows можна також використати команду:

           echo %time% & main.py & call echo %^time%
           import numpy as np
           from multiprocessing import Pool # задіяти багато
           процесів
           #from multiprocessing.dummy import Pool # або задіяти
           багато потоків
           import sys, timeit
           def f(x): # функція, яка виконується в кожному
           процесі
               return x*x
           if __name__ == '__main__':
               time = timeit.default_timer()
               X=[np.matrix(np.random.rand(1000,1000)) for i in
           range(50)] # 50 матриць 1000x1000
               if 's' in sys.argv:
                   Y=map(f,X) # застосувати f для кожного у X
           (тільки 1 процес)
               else:
                                          85
   81   82   83   84   85   86   87   88   89   90   91