在工作中,我们正在使用gevent创建一些异步服务器,关于何时相对于其他模块执行猴子补丁,存在一些争议。 gevent文档显示了以下内容:

from gevent import monkey
monkey.patch_socket()
import socket


在导入库模块之前进行猴子修补的位置。

但是,我的经理认为猴子修补的顺序应为:

import socket
from gevent import monkey
monkey.patch_socket()


导入库模块后调用猴子修补的位置。这使得看起来就像猴子修补程序看到套接字模块已被导入,并在那时对其进行修补。

我发现有些讨论说是一种方式,而另一些说是另一种方式。我自己的简单测试似乎说没关系。有没有人对此有意见,有明确的原因,或者有引用说明原因?

提前致谢!!
道格

最佳答案

作为gevent的当前维护者,我将指出the documentation,它具体表示(multiple times),建议的猴子修补方法是尽早进行,最好在任何其他导入之前进行。

现在,使用大多数标准库模块,您就可以在导入猴子补丁后摆脱困境。但是第三方库不一定一定是安全的。总的来说,它更安全,并且可以减少猴子补丁的麻烦。

10-08 16:28