2016-04-08 79 views
1

代码:Evenlet猴补丁不工作

import eventlet 
eventlet.monkey_patch() 
import requests 

def main(): 
    print(eventlet.patcher.is_monkey_patched(requests)) 


if __name__ == "__main__": 
    main() 

我预计print语句返回true,但实际上它返回false。 这是怎么回事?

回答

0

的确如此,Eventlet并没有对requests进行修补,不需要。绿线方面没有什么特别之处。因为它基本上是提供更好API的urllib3的包装。然后urllib3也没有打补丁,出于同样的原因。但是,我们确定修补程序socketrequests正在使用urllib3,它使用socket创建TCP连接并传输数据。

您可以在网站上看到由Eventlet修补的模块列表http://eventlet.net/doc/patching.html#monkeypatching-the-standard-library截止今天(2016-04-09)它是:os,select,socket,thread,time,psycopg。 很快logging将加入此列表。

我很乐意帮助您解决实际问题,您认为is_monkey_patched是解决方案。

+0

因此,当import requests = eventlet.import_patched('requests')时,它确实具有使请求API调用变为绿色(通过最终修补套接字)的累积效果? – conquester

+0

是的,这是正确的。两个安全选项可以是程序第一行的'monkey_patch()'或任意位置的'import_patched'。 – temoto