我们从Python开源项目中,提取了以下8个代码示例,用于说明如何使用ctypes._win_functype_cache()。
def WINFUNCTYPE(restype, *argtypes, **kw): flags = _FUNCFLAG_STDCALL if kw.pop("use_errno", False): flags |= ctypes._FUNCFLAG_USE_ERRNO if kw.pop("use_last_error", False): flags |= ctypes._FUNCFLAG_USE_LASTERROR if kw: raise ValueError("unexpected keyword argument(s) %s" % kw.keys()) try: return ctypes._win_functype_cache[(restype, argtypes, flags)] except KeyError: class WinFunctionType(ctypes._CFuncPtr): _argtypes_ = argtypes _restype_ = restype _flags_ = flags ctypes._win_functype_cache[(restype, argtypes, flags)] = WinFunctionType return WinFunctionType
def test_with_refcounts(runner, verbosity, testcase): """Run testcase several times, tracking reference counts.""" import gc import ctypes ptc = ctypes._pointer_type_cache.copy() cfc = ctypes._c_functype_cache.copy() wfc = ctypes._win_functype_cache.copy() # when searching for refcount leaks, we have to manually reset any # caches that ctypes has. def cleanup(): ctypes._pointer_type_cache = ptc.copy() ctypes._c_functype_cache = cfc.copy() ctypes._win_functype_cache = wfc.copy() gc.collect() test = unittest.makeSuite(testcase) for i in range(5): rc = sys.gettotalrefcount() runner.run(test) cleanup() COUNT = 5 refcounts = [None] * COUNT for i in range(COUNT): rc = sys.gettotalrefcount() runner.run(test) cleanup() refcounts[i] = sys.gettotalrefcount() - rc if filter(None, refcounts): print "%s leaks:\n\t" % testcase, refcounts elif verbosity: print "%s: ok." % testcase
def test_with_refcounts(runner, verbosity, testcase): """Run testcase several times, tracking reference counts.""" import gc import ctypes ptc = ctypes._pointer_type_cache.copy() cfc = ctypes._c_functype_cache.copy() wfc = ctypes._win_functype_cache.copy() # when searching for refcount leaks, we have to manually reset any # caches that ctypes has. def cleanup(): ctypes._pointer_type_cache = ptc.copy() ctypes._c_functype_cache = cfc.copy() ctypes._win_functype_cache = wfc.copy() gc.collect() test = unittest.makeSuite(testcase) for i in range(5): rc = sys.gettotalrefcount() runner.run(test) cleanup() COUNT = 5 refcounts = [None] * COUNT for i in range(COUNT): rc = sys.gettotalrefcount() runner.run(test) cleanup() refcounts[i] = sys.gettotalrefcount() - rc if filter(None, refcounts): print("%s leaks:\n\t" % testcase, refcounts) elif verbosity: print("%s: ok." % testcase)
def _reset_cache(): ctypes._win_functype_cache.clear() _original_reset_cache()