独自の種類のメソッド キャッシュを実装しようとしています。そのためには、まず、CPython 2.7.2 に実装されている既存のメソッド キャッシュを無効にします。このメソッド キャッシュを使用せずに CPython のベンチマークも行いたいからです。
コードを調べたところ、「typeobject.c」ファイルにいくつかのメソッド キャッシュ コードが見つかりました。
/* Internal API to look for a name through the MRO.
This returns a borrowed reference, and doesn't set an exception! */
PyObject *
_PyType_Lookup(PyTypeObject *type, PyObject *name)
{
Py_ssize_t i, n;
PyObject *mro, *res, *base, *dict;
unsigned int h;
if (MCACHE_CACHEABLE_NAME(name) &&
PyType_HasFeature(type, Py_TPFLAGS_VALID_VERSION_TAG)) {
/* fast path */
h = MCACHE_HASH_METHOD(type, name);
if (method_cache[h].version == type->tp_version_tag &&
method_cache[h].name == name)
return method_cache[h].value;
}
/* Look in tp_dict of types in MRO */
mro = type->tp_mro;
私が理解していることから、メソッドがメソッド キャッシュにない場合は、MRO をトラバースします。最もクリーンな方法で、メソッドキャッシュ全体を非アクティブ化したいだけです。助言がありますか?:)
アントニオ