На главную страницу | Новости  |  Ссылки | Контакты

Spyphy Farnsworth
Квантовая реальность. Кибернетика. Искусственный интеллект


Параллельное (многопоточное) программирование на Python

#!/bin/python

В языке Python есть 2 основных способа распараллеливания программ.

- fork/exec - ветвление процессов;

- thread/threading - порожденные потоки.

Ветвление процессов (fork/exec)


Это стандартный для linux-систем способ ветвления процессов (под виндой он не всегда будет работать).

Требуется импортировать модуль

import os

Работает это в два шага:

1) Создается точная копия процесса вместе с копией глобальной памяти:

pid = os.fork()

2) подмена процесса - запуск другой программы

os.execlp('python', 'python', 'child.py', str(parm))

Порожденные потоки


Есть два варианта работы с потоками:

- низкоуровневый модуль _thread (для python3) или просто thread (для python2);

- высокоуровневый модуль threading , который является объектно-ориентированной оберткой над _thread.

Простой пример (взято из книги Лутца, но я добавил еще глобальную переменную x, через которую можно взаимодействовать между потоками).

import _thread

x = 5

def child(tid):
	print('child', tid)
	global x
	x = x+1
	print('x='+str(x))
	
def parent():
	i = 0
	print('parent')	
	while True:
		i += 1
		_thread.start_new_thread(child, (i,))
		if input() == 'q': break

parent()





galaxy