Page 87 - 6734
P. 87

p=Pool(4) # створити пул 4-х процесів
                   Y=p.map(f, X) # задіяти 4 процеси
               print timeit.default_timer() - time

           9.77497753973
           15.1325679658

                      multiprocessing – запуск паралельних задач

               Аналог  прикладу  concurrent.futures  на  основі  multiprocessing.
           Тут  функціям  ProcessPoolExecutor,  submit,  result,  map
           відповідають Pool, apply_async, get, map.

           import time
           from multiprocessing import Pool
           def f(x): # функція, яка буде виконуватись в окремих
           процесах
               time.sleep(x) # затримка (тільки для тестування
           паралельності)
               return x
           if __name__ == '__main__':
               pool = Pool() # пул процесів
               a = pool.apply_async(f, [4]) # AsyncResult
               b = pool.apply_async(f, [2])
               while any([a,b]): # отримати результати
           асинхронно
                   if a and a.ready(): print a.get(); a=False
                   if b and b.ready(): print b.get(); b=False
               #print pool.map(f, [1,2]) # або чекати усі
           результати
           2, 4

                       multiprocessing – міжпроцесова взаємодія

               Для обміну  об’єктами між процесами можна використовувати
           черги  (Queue),  канали  (Pipe),  спільну  пам’ять  (Value,  Array)  [5,

                                          86
   82   83   84   85   86   87   88   89   90   91   92