import logging import sys import time from thread import ThreadPoolExecutor def fetch(i, d=0.1): logging.info("fetching %s", i) time.sleep(d) return i def run1(jobs): with ThreadPoolExecutor(max_workers=1) as fetcher: for response in fetcher.map(fetch, jobs): logging.info("fetched %s: %s", response, 1 / response) def run2(jobs): with ThreadPoolExecutor(max_workers=1) as fetcher: responses = fetcher.map(fetch, jobs) for i, response in enumerate(responses): logging.info("fetched %s: %s", i, 1 / response) def run3(jobs): fetcher = ThreadPoolExecutor(max_workers=1) try: responses = fetcher.map(fetch, jobs) for i, response in enumerate(responses): logging.info("fetched %s: %s", i, 1 / response) finally: fetcher.shutdown(wait=False) logging.info("executor shutdown") if __name__ == "__main__": logging.basicConfig( format="[%(relativeCreated)s] %(threadName)s: %(message)s", level=logging.INFO ) func = globals()[sys.argv[1]] func(range(-2, 12))