Что такое исправление обезьяны с помощью библиотеки gevent python?

Я читаю http://sdiehl.github.io/gevent-tutorial/ . В примере внизу страницы я вижу:

import gevent.monkey
gevent.monkey.patch_socket()

Я прочитал Что такое патч для обезьян? , который дает общее обсуждение обезьяны patching, но я не понимаю, почему на исправление обезьян ссылается gevent.


person user1592380    schedule 30.06.2015    source источник
comment
Это полностью объяснено в разделе Monkeypatching руководства, на которое вы ссылаетесь.   -  person ekhumoro    schedule 30.06.2015


Ответы (1)


Gevent — это совместная многозадачная библиотека. Это работает следующим образом: вы, программист, организуете свой код в единицы работы, называемые гринлетами. Пока данный гринлет работает, он работает один. Когда он достигает точки, где он заблокируется, то есть ему придется ждать какого-то внешнего сигнала, такого как файл, тайм-аут, наши сетевые данные, гринлет должен сотрудничать, сигнализируя gevent, который организует для запуска какого-то другого гринлета. Прежний зеленоватый цвет возобновится, как только будут готовы данные, которых он ждал. (Это суть в цвете карандаша, может быть некоторая сложность, о которой вам было бы полезно знать, что выходит за рамки этого ответа.)

Теперь стандартная библиотека Python (была?) несовместима. Вместо того, чтобы сигнализировать gevent о том, что определенный гринлет можно приостановить, стандартное поведение — эгоистичная блокировка. Это вызывает проблему, так как работает только первый гринлет: остальные никогда не получают шанса быть запланированными.

Введите латание денег. Цель monkey.patch — заменить блокирующие вызовы в stdlib взаимодействующими альтернативами, чтобы существующий код мог использовать преимущества параллелизма гринлетов без необходимости его перезаписи.

person Danver Braganza    schedule 30.06.2015
comment
Спасибо, это очень полезно. - person user1592380; 30.06.2015