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