2012/1/19 Robert Bradshaw <rober...@math.washington.edu>: > I think the right thing to do here is make all module-level globals > into "cdef public" attributes, i.e. C globals with getters and setters > for Python space. I'm not sure whether this would best be done by > creating a custom dict or module subclass, but it would probably be > cleaner and afford much more than a 1.6x speedup. > > - Robert > > On Wed, Jan 18, 2012 at 12:30 PM, Vitja Makarov <vitja.maka...@gmail.com> > wrote: >> I tried to optimize module lookups (__pyx_m) by caching internal PyDict >> state. >> >> In this example bar() is 1.6 time faster (500us against 842us): >> >> C = 123 >> def foo(a): >> return C * adef bar(): >> for i in range(10000): foo(i) >> Here is proof of >> concept:https://github.com/vitek/cython/commit/1d134fe54a74e6fc6d39d09973db499680b2a8d9 >> >> So the question is: does it worth it? >>
Yes, nice idea. It's possible to subclass PyModuleObject and I didn't find any use of PyModule_CheckExact() in CPython's sources: import types import sys global_foo = 1234 class CustomModule(types.ModuleType): def __init__(self, name): types.ModuleType.__init__(self, name) sys.modules[name] = self @property def foo(self): return global_foo @foo.setter def foo(self, value): global global_foo global_foo = value CustomModule('foo') import foo print foo.foo -- vitja. _______________________________________________ cython-devel mailing list cython-devel@python.org http://mail.python.org/mailman/listinfo/cython-devel