import contextlib
import threading
import time

@contextlib.contextmanager
def cm():
	try:
		yield
	finally:
		print 'in __exit__'

def f():
	with cm():
		print 'in with block'
		event.set()
		time.sleep(10)

event = threading.Event()

t = threading.Thread(target=f)
t.daemon = True
t.start()

event.wait()