Практическая работа №6. Программирование мультипоточного приложения

Опубликовано пользователем Бессонов Л.В. 15.11.2009г.

Цель работы

Ознакомление с основами мультипоточного программирования.

Теоретические материалы

  1. Многопоточность

Выполнение работы

В листинге приведён код программы на языке Python, запускающей параллельно несколько процессов.

  1. #!/usr/bin/python3 -O
  2. # -*- coding: utf-8 -*-
  3. import time
  4. import sys
  5. import os
  6. from multiprocessing import Process, freeze_support
  7.  
  8. def info(title):
  9. if hasattr(os, 'getppid' ):
  10. print( '{0}:\tPID={1} PPID={2}'.format(title, os.getpid(), os.getppid()) )
  11. else:
  12. print('{0}:\tPID={1}'.format(title, os.getpid()))
  13.  
  14. def fun(name):
  15. info('порождённый процесс')
  16. print('процесс {0} выполняет функцию с параметром {1}'.format(os.getpid(), name))
  17. time.sleep( 05)
  18.  
  19. if __name__ == '__main__':
  20. freeze_support()
  21. nproc = 5 # Количество запускаемых параллельных процессов
  22. print('число дочерних процессов ', nproc)
  23. info('родительский процесс')
  24. procs = []
  25. for i in range(nproc):
  26. procs.append(Process( target = fun, args = ( i, )))
  27. for i in range(nproc):
  28. procs[i].start()
  29. for i in range(nproc):
  30. procs[i].join()
  31. print('завершается родительский процесс')

Как видите, всё достаточно легко и прозрачно. Каждый из запускаемых процессов, по сути, есть функция. В приведенном листинги все запускаемые процессы представлены одной и той же функций (можно сказать что тело этой функции запускается несколько раз). Однако никто не мешает запускать параллельно различные функции.

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

 

Индивидуальные варианты

Вариант 1

Алгоритм численного интегрирования методом прямоугольников для функции $ e^{-x^2} $ на отрезке $ [-1;1] $

Вариант 2

 Алгоритм чиленного интегрирования методом трапеций для функции $ \frac{1}{ln x} $ на отрезке $ [2;5] $ 

Вариант 3

 Алгоритм чиленного интегрирования методом Симпсона для функции $ cos x^2 $ на отрезке $ [0;5] $ 

Вариант 4

Алгоритм перемножения матриц $ A \times B, dim A = 15, dim B = 15 $ 

Вариант 5

Алгоритм перестановки строк в матрице $ A, dim A = 15, (i \rightarrow 16-i) $ 

Вариант 6

 Алгоритм чиленного интегрирования методом Гаусса для функции $ \frac{sin x}{x} $ на отрезке $ [\pi;2\pi] $ 



Баннер SGU.RU