# io_bound/threaded.py
import concurrent.futures as futures
import requests
import threading
import time
import asyncio
data = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
async def async_task():
for i in range(5):
print(f"async running {i}")
await asyncio.sleep(0.02)
print("async done")
return "I'm done"
def sleepy(n):
time.sleep(1)
return n*2
async def ExecuteSleep():
loop = asyncio.get_running_loop()
l = len(data)
results = []
# Submit needs explicit mapping of I/p and O/p
# Output may not be in the same Order
with futures.ThreadPoolExecutor(max_workers=l) as executor:
result_futures = {d:loop.run_in_executor(executor, sleepy,d) for d in data}
results = {d:await result_futures[d] for d in data}
return results
if __name__ == '__main__':
print("Starting ...")
t1 = time.time()
loop = asyncio.get_event_loop()
tasks = [ExecuteSleep(),async_task()]
# x,y = asyncio.run(asyncio.wait(tasks))
x,y = loop.run_until_complete(asyncio.gather(*tasks))
print("Printing x {}".format(x))
print("Printing y {}".format(y))
print("Finished ...")
t2 = time.time()
print(t2-t1)
IyBpb19ib3VuZC90aHJlYWRlZC5weQppbXBvcnQgY29uY3VycmVudC5mdXR1cmVzIGFzIGZ1dHVyZXMKaW1wb3J0IHJlcXVlc3RzCmltcG9ydCB0aHJlYWRpbmcKaW1wb3J0IHRpbWUKaW1wb3J0IGFzeW5jaW8KCmRhdGEgPSBbMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjBdCgphc3luYyBkZWYgYXN5bmNfdGFzaygpOgogICAgZm9yIGkgaW4gcmFuZ2UoNSk6CiAgICAgICAgcHJpbnQoZiJhc3luYyBydW5uaW5nIHtpfSIpCiAgICAgICAgYXdhaXQgYXN5bmNpby5zbGVlcCgwLjAyKQogICAgcHJpbnQoImFzeW5jIGRvbmUiKQogICAgcmV0dXJuICJJJ20gZG9uZSIKCmRlZiBzbGVlcHkobik6CiAgICB0aW1lLnNsZWVwKDEpCiAgICByZXR1cm4gbioyCgphc3luYyBkZWYgRXhlY3V0ZVNsZWVwKCk6CiAgICBsb29wID0gYXN5bmNpby5nZXRfcnVubmluZ19sb29wKCkgCiAgICBsID0gbGVuKGRhdGEpCiAgICByZXN1bHRzID0gW10KICAgICMgU3VibWl0IG5lZWRzIGV4cGxpY2l0IG1hcHBpbmcgb2YgSS9wIGFuZCBPL3AKICAgICMgT3V0cHV0IG1heSBub3QgYmUgaW4gdGhlIHNhbWUgT3JkZXIKICAgIHdpdGggZnV0dXJlcy5UaHJlYWRQb29sRXhlY3V0b3IobWF4X3dvcmtlcnM9bCkgYXMgZXhlY3V0b3I6CiAgICAgICAgcmVzdWx0X2Z1dHVyZXMgPSB7ZDpsb29wLnJ1bl9pbl9leGVjdXRvcihleGVjdXRvciwgc2xlZXB5LGQpIGZvciBkIGluIGRhdGF9CiAgICAgICAgcmVzdWx0cyA9IHtkOmF3YWl0IHJlc3VsdF9mdXR1cmVzW2RdIGZvciBkIGluIGRhdGF9CiAgICAKICAgIHJldHVybiByZXN1bHRzCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgcHJpbnQoIlN0YXJ0aW5nIC4uLiIpCiAgICB0MSA9IHRpbWUudGltZSgpCiAgICAKICAgIGxvb3AgPSBhc3luY2lvLmdldF9ldmVudF9sb29wKCkKICAgIHRhc2tzID0gW0V4ZWN1dGVTbGVlcCgpLGFzeW5jX3Rhc2soKV0KICAgICMgeCx5ICA9IGFzeW5jaW8ucnVuKGFzeW5jaW8ud2FpdCh0YXNrcykpCiAgICB4LHkgID0gbG9vcC5ydW5fdW50aWxfY29tcGxldGUoYXN5bmNpby5nYXRoZXIoKnRhc2tzKSkgICAgCiAgICAKICAgIHByaW50KCJQcmludGluZyB4IHt9Ii5mb3JtYXQoeCkpIAogICAgcHJpbnQoIlByaW50aW5nIHkge30iLmZvcm1hdCh5KSkgCiAgICAgICAgCiAgICBwcmludCgiRmluaXNoZWQgLi4uIikKICAgIHQyID0gdGltZS50aW1lKCkKICAgIHByaW50KHQyLXQxKQ==
Starting ...
async running 0
async running 1
async running 2
async running 3
async running 4
async done
Printing x {1: 2, 2: 4, 3: 6, 4: 8, 5: 10, 6: 12, 7: 14, 8: 16, 9: 18, 10: 20, 11: 22, 12: 24, 13: 26, 14: 28, 15: 30, 16: 32, 17: 34, 18: 36, 19: 38, 20: 40}
Printing y I'm done
Finished ...
1.008409023284912