Параллельное программирование с сопрограммами в Python - PullRequest
5 голосов
/ 30 июня 2011

Сопрограммы - отличная парадигма для облегчения параллельного программирования. И в большинстве случаев параллельные задачи легко распараллеливаются. На языке Go легко использовать goroutines для выполнения параллельных задач. Есть ли способ сделать то же самое в Python, например, использовать сопрограммы для создания процессов и их синхронизации?

Ответы [ 2 ]

3 голосов
/ 30 июня 2011

Да, Python поддерживает сопрограммы в библиотеках и через генераторы: см., Например, библиотеку Greenlet . Кроме того, существует производная с именем Stackless Python , которая имеет встроенную поддержку нескольких функций параллельного программирования, таких как микропотоки и каналы.

Обратите внимание, что в CPython по умолчанию глобальная блокировка интерпретатора позволяет запускать одновременно только один поток, что может быть проблемой.

2 голосов
/ 30 июня 2011

Если вы хотите использовать стандартный интерпретатор Python, библиотека greenlet - это то, что вам нужно.

Что касается GIL, это не должно быть проблемой для сопрограмм. Вы можете рассматривать модель сопрограммы greenlet как несколько легких «потоков» пространства пользователя, работающих в одном потоке ядра. Таким образом, с точки зрения GIL и OS, он все еще однопоточный.

...