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()
aW1wb3J0IGFzeW5jaW8KaW1wb3J0IHRpbWUKCgpkZWYgc3luY19ibG9jayhuKToKICAgIHRlbXAgPSAwCiAgICBmb3IgaSBpbiByYW5nZShuKToKICAgICAgICBmb3IgaiBpbiByYW5nZShuLy8xMDApOgogICAgICAgICAgICB0ZW1wID0gKGkgKyBqKSAqIDIKICAgIHByaW50KCdTeW5jIGJsb2NrIGZpbmlzaGVkJykKCgphc3luYyBkZWYgYXN5bmNfYmxvY2sobik6CiAgICB0ZW1wID0gMAogICAgZm9yIGkgaW4gcmFuZ2Uobik6CiAgICAgICAgaWYgbiAlIDEwMDAgPT0gMDoKICAgICAgICAgICAgYXdhaXQgYXN5bmNpby5zbGVlcCgwKQogICAgICAgIGZvciBqIGluIHJhbmdlKG4vLzEwMCk6CiAgICAgICAgICAgIHRlbXAgPSAoaSArIGopICogMgogICAgcHJpbnQoJ0FzeW5jIGJsb2NrIGZpbmlzaGVkJykKCgphc3luYyBkZWYgYXN5bmNfYmxvY2tfc3RvcChuKToKICAgIHN5bmNfYmxvY2sobikKCgphc3luYyBkZWYgbWluaXRhc2sobmFtZSk6CiAgICBmb3IgXyBpbiByYW5nZSgxMDAwKToKICAgICAgICBwYXNzCiAgICBwcmludChmJ1Rhc2sge25hbWV9IGZpbmlzaGVkJykKCgphc3luYyBkZWYgdGVzdDEoKToKICAgIGZ1dHVyZXMgPSBbYXN5bmNfYmxvY2soNTBfMDAwKV0KICAgIGZvciBpIGluIHJhbmdlKDEwKToKICAgICAgICBmdXR1cmVzLmFwcGVuZChtaW5pdGFzayhpKSkKCiAgICBhd2FpdCBhc3luY2lvLmdhdGhlcigqZnV0dXJlcykKICAgIHByaW50KCdGSU5JU0hFRCcpCgoKYXN5bmMgZGVmIHRlc3QyKCk6CiAgICBmdXR1cmVzID0gW2FzeW5jX2Jsb2NrX3N0b3AoNTBfMDAwKV0KICAgIGZvciBpIGluIHJhbmdlKDEwKToKICAgICAgICBmdXR1cmVzLmFwcGVuZChtaW5pdGFzayhpKSkKCiAgICBhd2FpdCBhc3luY2lvLmdhdGhlcigqZnV0dXJlcykKICAgIHByaW50KCdGSU5JU0hFRCcpCgoKZGVmIG1haW4oKToKCWFzeW5jaW8ucnVuKHRlc3QxKCkpCglhc3luY2lvLnJ1bih0ZXN0MigpKQoJCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgbWFpbigpCg==