import asyncio
 
def create_timer(future, ms):
	async def inner():
		await asyncio.sleep(ms/1000)
		await future
	return asyncio.create_task(inner)
 
 
def create_interval(future, ms):
	async def inner():
		i = 0
		while True:
			print(f'{i} round')
			await asyncio.sleep(ms/1000)
			await future
			i += 1
	return asyncio.create_task(inner())
 
 
async def test_func():
	print('START TEST FUNC')
	await asyncio.sleep(1)  # some i/o operation
	print('END TEST FUNC')
 
 
async def main():
	print('START MAIN')
	t1 = create_interval(test_func(), 500)
	await asyncio.sleep(3)  # long await
	t1.cancel()
	print('TASK CANCELLED')
	await asyncio.sleep(3)
	print('END MAIN')
 
 
if __name__ == '__main__':
	asyncio.run(main())
 
 
 
 
				aW1wb3J0IGFzeW5jaW8KCmRlZiBjcmVhdGVfdGltZXIoZnV0dXJlLCBtcyk6Cglhc3luYyBkZWYgaW5uZXIoKToKCQlhd2FpdCBhc3luY2lvLnNsZWVwKG1zLzEwMDApCgkJYXdhaXQgZnV0dXJlCglyZXR1cm4gYXN5bmNpby5jcmVhdGVfdGFzayhpbm5lcikKCQoKZGVmIGNyZWF0ZV9pbnRlcnZhbChmdXR1cmUsIG1zKToKCWFzeW5jIGRlZiBpbm5lcigpOgoJCWkgPSAwCgkJd2hpbGUgVHJ1ZToKCQkJcHJpbnQoZid7aX0gcm91bmQnKQoJCQlhd2FpdCBhc3luY2lvLnNsZWVwKG1zLzEwMDApCgkJCWF3YWl0IGZ1dHVyZQoJCQlpICs9IDEKCXJldHVybiBhc3luY2lvLmNyZWF0ZV90YXNrKGlubmVyKCkpCgkKCQphc3luYyBkZWYgdGVzdF9mdW5jKCk6CglwcmludCgnU1RBUlQgVEVTVCBGVU5DJykKCWF3YWl0IGFzeW5jaW8uc2xlZXAoMSkgICMgc29tZSBpL28gb3BlcmF0aW9uCglwcmludCgnRU5EIFRFU1QgRlVOQycpCgkKCmFzeW5jIGRlZiBtYWluKCk6CglwcmludCgnU1RBUlQgTUFJTicpCgl0MSA9IGNyZWF0ZV9pbnRlcnZhbCh0ZXN0X2Z1bmMoKSwgNTAwKQoJYXdhaXQgYXN5bmNpby5zbGVlcCgzKSAgIyBsb25nIGF3YWl0Cgl0MS5jYW5jZWwoKQoJcHJpbnQoJ1RBU0sgQ0FOQ0VMTEVEJykKCWF3YWl0IGFzeW5jaW8uc2xlZXAoMykKCXByaW50KCdFTkQgTUFJTicpCgkKCQppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgoJYXN5bmNpby5ydW4obWFpbigpKQoJCgkKCQoJ