Gevent — это совместная многозадачная библиотека. Это работает следующим образом: вы, программист, организуете свой код в единицы работы, называемые гринлетами. Пока данный гринлет работает, он работает один. Когда он достигает точки, где он заблокируется, то есть ему придется ждать какого-то внешнего сигнала, такого как файл, тайм-аут, наши сетевые данные, гринлет должен сотрудничать, сигнализируя gevent, который организует для запуска какого-то другого гринлета. Прежний зеленоватый цвет возобновится, как только будут готовы данные, которых он ждал. (Это суть в цвете карандаша, может быть некоторая сложность, о которой вам было бы полезно знать, что выходит за рамки этого ответа.)
Теперь стандартная библиотека Python (была?) несовместима. Вместо того, чтобы сигнализировать gevent о том, что определенный гринлет можно приостановить, стандартное поведение — эгоистичная блокировка. Это вызывает проблему, так как работает только первый гринлет: остальные никогда не получают шанса быть запланированными.
Введите латание денег. Цель monkey.patch — заменить блокирующие вызовы в stdlib взаимодействующими альтернативами, чтобы существующий код мог использовать преимущества параллелизма гринлетов без необходимости его перезаписи.
person
Danver Braganza
schedule
30.06.2015