mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 15:41:43 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			190 lines
		
	
	
	
		
			4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			190 lines
		
	
	
	
		
			4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from __future__ import with_statement
 | 
						|
from pybench import Test
 | 
						|
 | 
						|
class WithFinally(Test):
 | 
						|
 | 
						|
    version = 2.0
 | 
						|
    operations = 20
 | 
						|
    rounds = 80000
 | 
						|
 | 
						|
    class ContextManager(object):
 | 
						|
        def __enter__(self):
 | 
						|
            pass
 | 
						|
        def __exit__(self, exc, val, tb):
 | 
						|
            pass
 | 
						|
 | 
						|
    def test(self):
 | 
						|
 | 
						|
        cm = self.ContextManager()
 | 
						|
 | 
						|
        for i in range(self.rounds):
 | 
						|
            with cm: pass
 | 
						|
            with cm: pass
 | 
						|
            with cm: pass
 | 
						|
            with cm: pass
 | 
						|
            with cm: pass
 | 
						|
            with cm: pass
 | 
						|
            with cm: pass
 | 
						|
            with cm: pass
 | 
						|
            with cm: pass
 | 
						|
            with cm: pass
 | 
						|
            with cm: pass
 | 
						|
            with cm: pass
 | 
						|
            with cm: pass
 | 
						|
            with cm: pass
 | 
						|
            with cm: pass
 | 
						|
            with cm: pass
 | 
						|
            with cm: pass
 | 
						|
            with cm: pass
 | 
						|
            with cm: pass
 | 
						|
            with cm: pass
 | 
						|
 | 
						|
    def calibrate(self):
 | 
						|
 | 
						|
        cm = self.ContextManager()
 | 
						|
 | 
						|
        for i in range(self.rounds):
 | 
						|
            pass
 | 
						|
 | 
						|
 | 
						|
class TryFinally(Test):
 | 
						|
 | 
						|
    version = 2.0
 | 
						|
    operations = 20
 | 
						|
    rounds = 80000
 | 
						|
 | 
						|
    class ContextManager(object):
 | 
						|
        def __enter__(self):
 | 
						|
            pass
 | 
						|
        def __exit__(self):
 | 
						|
            # "Context manager" objects used just for their cleanup
 | 
						|
            # actions in finally blocks usually don't have parameters.
 | 
						|
            pass
 | 
						|
 | 
						|
    def test(self):
 | 
						|
 | 
						|
        cm = self.ContextManager()
 | 
						|
 | 
						|
        for i in range(self.rounds):
 | 
						|
            cm.__enter__()
 | 
						|
            try: pass
 | 
						|
            finally: cm.__exit__()
 | 
						|
 | 
						|
            cm.__enter__()
 | 
						|
            try: pass
 | 
						|
            finally: cm.__exit__()
 | 
						|
 | 
						|
            cm.__enter__()
 | 
						|
            try: pass
 | 
						|
            finally: cm.__exit__()
 | 
						|
 | 
						|
            cm.__enter__()
 | 
						|
            try: pass
 | 
						|
            finally: cm.__exit__()
 | 
						|
 | 
						|
            cm.__enter__()
 | 
						|
            try: pass
 | 
						|
            finally: cm.__exit__()
 | 
						|
 | 
						|
            cm.__enter__()
 | 
						|
            try: pass
 | 
						|
            finally: cm.__exit__()
 | 
						|
 | 
						|
            cm.__enter__()
 | 
						|
            try: pass
 | 
						|
            finally: cm.__exit__()
 | 
						|
 | 
						|
            cm.__enter__()
 | 
						|
            try: pass
 | 
						|
            finally: cm.__exit__()
 | 
						|
 | 
						|
            cm.__enter__()
 | 
						|
            try: pass
 | 
						|
            finally: cm.__exit__()
 | 
						|
 | 
						|
            cm.__enter__()
 | 
						|
            try: pass
 | 
						|
            finally: cm.__exit__()
 | 
						|
 | 
						|
            cm.__enter__()
 | 
						|
            try: pass
 | 
						|
            finally: cm.__exit__()
 | 
						|
 | 
						|
            cm.__enter__()
 | 
						|
            try: pass
 | 
						|
            finally: cm.__exit__()
 | 
						|
 | 
						|
            cm.__enter__()
 | 
						|
            try: pass
 | 
						|
            finally: cm.__exit__()
 | 
						|
 | 
						|
            cm.__enter__()
 | 
						|
            try: pass
 | 
						|
            finally: cm.__exit__()
 | 
						|
 | 
						|
            cm.__enter__()
 | 
						|
            try: pass
 | 
						|
            finally: cm.__exit__()
 | 
						|
 | 
						|
            cm.__enter__()
 | 
						|
            try: pass
 | 
						|
            finally: cm.__exit__()
 | 
						|
 | 
						|
            cm.__enter__()
 | 
						|
            try: pass
 | 
						|
            finally: cm.__exit__()
 | 
						|
 | 
						|
            cm.__enter__()
 | 
						|
            try: pass
 | 
						|
            finally: cm.__exit__()
 | 
						|
 | 
						|
            cm.__enter__()
 | 
						|
            try: pass
 | 
						|
            finally: cm.__exit__()
 | 
						|
 | 
						|
            cm.__enter__()
 | 
						|
            try: pass
 | 
						|
            finally: cm.__exit__()
 | 
						|
 | 
						|
    def calibrate(self):
 | 
						|
 | 
						|
        cm = self.ContextManager()
 | 
						|
 | 
						|
        for i in range(self.rounds):
 | 
						|
            pass
 | 
						|
 | 
						|
 | 
						|
class WithRaiseExcept(Test):
 | 
						|
 | 
						|
    version = 2.0
 | 
						|
    operations = 2 + 3 + 3
 | 
						|
    rounds = 100000
 | 
						|
 | 
						|
    class BlockExceptions(object):
 | 
						|
        def __enter__(self):
 | 
						|
            pass
 | 
						|
        def __exit__(self, exc, val, tb):
 | 
						|
            return True
 | 
						|
 | 
						|
    def test(self):
 | 
						|
 | 
						|
        error = ValueError
 | 
						|
        be = self.BlockExceptions()
 | 
						|
 | 
						|
        for i in range(self.rounds):
 | 
						|
            with be: raise error
 | 
						|
            with be: raise error
 | 
						|
            with be: raise error("something")
 | 
						|
            with be: raise error("something")
 | 
						|
            with be: raise error("something")
 | 
						|
            with be: raise error("something")
 | 
						|
            with be: raise error("something")
 | 
						|
            with be: raise error("something")
 | 
						|
 | 
						|
    def calibrate(self):
 | 
						|
 | 
						|
        error = ValueError
 | 
						|
        be = self.BlockExceptions()
 | 
						|
 | 
						|
        for i in range(self.rounds):
 | 
						|
            pass
 |