#!/usr/bin/env python3
import threading
import time
from concurrent.futures import ThreadPoolExecutor as Pool
from timeit import default_timer as timer
def do_work(item):
time.sleep(.1) # pretend to do some lengthy work.
return threading.current_thread().name, item # return results
with Pool(max_workers=4) as executor:
# submit work items to executor (in this case, just a number).
start = timer()
for name, item in executor.map(do_work, range(20)):
print("%s %s" % (name, item)) # print results
# "Work" took .1 seconds per task.
# 20 tasks serially would be 2 seconds.
# With 4 threads should be about .5 seconds
print('time:', timer() - start)
IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwppbXBvcnQgdGhyZWFkaW5nCmltcG9ydCB0aW1lCmZyb20gY29uY3VycmVudC5mdXR1cmVzIGltcG9ydCBUaHJlYWRQb29sRXhlY3V0b3IgYXMgUG9vbApmcm9tIHRpbWVpdCBpbXBvcnQgZGVmYXVsdF90aW1lciBhcyB0aW1lcgoKZGVmIGRvX3dvcmsoaXRlbSk6CiAgICB0aW1lLnNsZWVwKC4xKSAjIHByZXRlbmQgdG8gZG8gc29tZSBsZW5ndGh5IHdvcmsuCiAgICByZXR1cm4gdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkubmFtZSwgaXRlbSAgIyByZXR1cm4gcmVzdWx0cwoKd2l0aCBQb29sKG1heF93b3JrZXJzPTQpIGFzIGV4ZWN1dG9yOgogICAgIyBzdWJtaXQgd29yayBpdGVtcyB0byBleGVjdXRvciAoaW4gdGhpcyBjYXNlLCBqdXN0IGEgbnVtYmVyKS4KICAgIHN0YXJ0ID0gdGltZXIoKQogICAgZm9yIG5hbWUsIGl0ZW0gaW4gZXhlY3V0b3IubWFwKGRvX3dvcmssIHJhbmdlKDIwKSk6CiAgICAgICAgcHJpbnQoIiVzICVzIiAlIChuYW1lLCBpdGVtKSkgIyBwcmludCByZXN1bHRzCgojICJXb3JrIiB0b29rIC4xIHNlY29uZHMgcGVyIHRhc2suCiMgMjAgdGFza3Mgc2VyaWFsbHkgd291bGQgYmUgMiBzZWNvbmRzLgojIFdpdGggNCB0aHJlYWRzIHNob3VsZCBiZSBhYm91dCAuNSBzZWNvbmRzCnByaW50KCd0aW1lOicsIHRpbWVyKCkgLSBzdGFydCkK