什么是python gevent库的monkeypatching?

时间:2015-06-30 01:18:28

标签: python gevent

我正在阅读http://sdiehl.github.io/gevent-tutorial/。在页面底部的示例中,我看到:

import gevent.monkey
gevent.monkey.patch_socket()

我已阅读What is a monkey patch?,其中提供了有关猴子修补的一般性讨论,但我不明白为什么猴子修补会被gevent引用。

1 个答案:

答案 0 :(得分:3)

Gevent是一个合作的多任务库。它的工作方式是程序员将代码组织成称为greenlet的工作单元。当给定的greenlet正在运行时,它会单独运行。当它到达它将阻塞的点时,也就是说,它必须等待一些外部信号,如文件,超时,我们的网络数据,greenlet应合作通过发信号gevent,谁安排一些其他greenlet运行。一旦其等待的数据准备好,前绿色将恢复。 (这是蜡笔色的要点,可能会有一些复杂性对你有用,因为你知道这超出了这个答案的范围。)

现在,Python的标准库(不是?)不合作。标准行为是自私地阻止,而不是通知gevent某个greenlet可以被暂停。这会导致一个问题,因为只有第一个greenlet正在运行:其他greenlet没有机会被安排。

输入货币补丁。 monkey.patch的目的是用合作的替代方法替换stdlib中的阻塞调用,这样现有的代码就可以利用greenlet的并发性而不需要重写。