什么是使用Python gevent库的monkeypatching?

2024-04-20 05:32:33 发布

您现在位置:Python中文网/ 问答频道 /正文

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

import gevent.monkey
gevent.monkey.patch_socket()

我读过What is a monkey patch?,它给出了monkey补丁的一般性讨论,但是我不明白为什么monkey patching会被gevent引用。在


Tags: ioimportgithubhttp示例isgevent页面
1条回答
网友
1楼 · 发布于 2024-04-20 05:32:33

Gevent是一个协作的多任务库。它的工作方式是你,程序员,把你的代码组织成叫做greenlets的工作单元。当一个给定的greenlet在运行时,它是单独运行的。当它到达阻塞点时,也就是说,它必须等待一些外部信号,比如文件、超时、我们的网络数据,greenlet应该通过发送信号给gevent来合作,gevent会安排其他greenlet运行。一旦等待的数据准备就绪,以前的绿色将恢复。(这是蜡笔画的要点,可能有一些复杂的东西可以帮助你知道这超出了这个答案的范围。)

现在,Python的标准库是(was?)不合作。标准的行为是自私地阻止,而不是向gevent暗示某个greenlet可以暂停。这就造成了一个问题,因为只有第一个greenlet在运行:其他的都没有机会被调度。在

输入货币修补。重点猴子。补丁将stdlib中的阻塞调用替换为协作替代,以便现有代码可以利用greenlets的并发性,而无需重写。在

相关问题 更多 >