monkey patch指的是在運行時動態替換,一般是替換(添加)類的方法、類或者模塊都可以
首先使用系統模塊的socket,打印socket.socket函數
然后在使用gevent模塊的monkey.patch_socket()函數,打印socket.socket函數
socket.socket被動態替換成gevent的socket模塊
演示代碼如下
# -*- coding:utf8 -*- # /usr/bin/env python import socket print(socket.socket) print("after monkey patch") from gevent import monkey monkey.patch_socket() print(socket.socket) import select print(select.select) monkey.patch_select() print("after monkey patch") print(select.select)
<class 'socket.socket'>
after monkey patch
<class 'gevent._socket3.socket'>
<built-in function select>
after monkey patch
<function select at 0x108989510>
monkey patch使用自己代碼實現
import time print(time.time()) def _time(): return 'abc' time.time = _time print(time.time())
運行時動態替換掉了對應函數