import asyncio
import time


def sync_block(n):
    temp = 0
    for i in range(n):
        for j in range(n//100):
            temp = (i + j) * 2
    print('Sync block finished')


async def async_block(n):
    temp = 0
    for i in range(n):
        if n % 1000 == 0:
            await asyncio.sleep(0)
        for j in range(n//100):
            temp = (i + j) * 2
    print('Async block finished')


async def async_block_stop(n):
    sync_block(n)


async def minitask(name):
    for _ in range(1000):
        pass
    print(f'Task {name} finished')


async def test1():
    futures = [async_block(50_000)]
    for i in range(10):
        futures.append(minitask(i))

    await asyncio.gather(*futures)
    print('FINISHED')


async def test2():
    futures = [async_block_stop(50_000)]
    for i in range(10):
        futures.append(minitask(i))

    await asyncio.gather(*futures)
    print('FINISHED')


def main():
	asyncio.run(test1())
	asyncio.run(test2())
	

if __name__ == '__main__':
    main()
